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

Sql 构建具有动态列数的SELECT子句,sql,select,join,dynamic,resultset,Sql,Select,Join,Dynamic,Resultset,是否可以创建一个SELECT子句,根据连接的表返回不同数量的列 比如说。 如果我根据WHERE子句中的值连接一个表,我想返回tbl1.col1、tbl1.col2(如果连接了tabl tbl1),或者tbl2.col4、tbl2.col5、tbl2.col8(如果连接了表tbl2) 这可能吗?如何执行?不,您不能编写一个查询,有时返回n列,另一个查询返回m列。您可以这样做:在查询1或查询2返回数据的条件下,对两个查询使用UNIONALL。让列匹配,所以在一个查询没有值的地方,让它在此处选择nul

是否可以创建一个SELECT子句,根据连接的表返回不同数量的列

比如说。 如果我根据WHERE子句中的值连接一个表,我想返回tbl1.col1、tbl1.col2(如果连接了tabl tbl1),或者tbl2.col4、tbl2.col5、tbl2.col8(如果连接了表tbl2)


这可能吗?如何执行?

不,您不能编写一个查询,有时返回n列,另一个查询返回m列。您可以这样做:在查询1或查询2返回数据的条件下,对两个查询使用UNIONALL。让列匹配,所以在一个查询没有值的地方,让它在此处选择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,这是正常情况下的做法。

您可以为每个不同的场景创建视图,但能否举例说明您的意思?…您似乎需要两个不同的语句,为什么不单独编写查询呢。如果有一个公共部分,也许您需要一个视图。否则,您必须使用动态SQL构建语句,如何使用框架/应用程序层语言。我的问题与我的另一个问题相关……在SQL中使用它将是一件好事。非常感谢。