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结果集。
我设置了六个表,如下所示:
主键: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结果集。