构建具有动态列数的SELECT子句

时间:2014-06-13 06:24:20

标签: sql select join dynamic resultset

是否可以根据连接的表创建一个具有不同列数的SELECT子句?

例如。 如果我根据WHERE子句中的值加入表,我想返回tbl1.col1,tbl1.col2,如果tabl tbl1 加入,或者tbl2.col4,tbl2.col5,tbl2.col8如果表 tbl2 已加入。

这可能吗?怎么样?

1 个答案:

答案 0 :(得分:0)

不,你不能写一个有时会返回n列而另一个时间返回m列的查询。你可以做的是这样的:在两个查询上使用UNION ALL,条件是 查询1 查询2返回数据。列匹配,所以在一个查询没有值的情况下,让它在这个地方选择null。

select tbl1.col1 as firstname, tbl1.col2 as lastname, null as street, tbl1.col3 as job as street from ...
where @variable = 1
UNION ALL
select tbl2.col4 as firstname, tbl2.col5 as lastname, tbl2.col8 as street, null as job from ...
where @variable = 2;

或者您只是使用任何语言动态构建SQL并使用完全不同的SQL,这是人们通常会做的。