SQL:根据不同的条件选择不同的一组列显示

SQL: Selecting different set of columns to be displayed according to different conditions

我设置了六个表,如下所示:

主键:ID

Table 姓名:Table_1, ..., Table_6

我在设置 case-when 语句来实现此逻辑时遇到问题:

select table_1.id, table_1.A,
case    
    when table_1.A = data1, then show columns B and C
    when table_1.A = data2, then show columns D, E and F
    when table_1.A = data3, then show columns B, C, D, E and F
    when table_1.A = data4, then show no columns
from table_1, ..., table_6
where
    table_1.id = table2.id and
    table_1.id = table3.id and
    table_1.id = table4.id and
    table_1.id = table5.id and
    table_1.id = table6.id and
    table1.A = <one of data1/data2/data3/data4>

基本上,ID 和 A 列始终需要存在,B 到 F 以 A 列中的数据为条件。

所以有两个问题:1.这甚至可能吗? 2. 如果是,怎么做?

您可以使用 LEFT JOIN。不匹配的列将是 NULL:

select *
from table_1 t1 left join
     table_2 t2
     using (id) left join
     table_3 t3
     using (id) left join
     . . .;

如果您确实想要改变结果集中返回的列,则需要使用动态 SQL.

如果您真的想按行改变列数,那是不可能的。这样的结果集不是SQL结果集。