动态SQL / SQL循环/动态选择语句

问题描述 投票:0回答:1

昨晚我发了一个疯狂的冗长问题,太深了。因此,让我们再保持理论性。

假设您有一个很长的SELECT语句,其中包含数十个代码块。每个块创建一个略有不同的计算列。为了简单起见,您已经用一种颜色命名了每个块。

您还在顶部声明了5个变量。每个变量都包含一种颜色作为字符串。

是否可以遍历这些变量并使用内部的值来选择要运行的SELECT语句中的哪些块?

因此查询将返回3个计算列。绿色列,黄色,然后是绿色,变量4和5为空,则没有其他内容

DECLARE

@variable1 = 'Green'
@variable2 = 'Yellow'
@variable3 = 'Green'
@variable4 =  NULL
@variable5 = NULL

SELECT

CASE WHEN... THEN... AS 'Red Column',
CASE WHEN... THEN... AS 'Yellow Column',
CASE WHEN... THEN... AS 'Pink Column',
CASE WHEN... THEN... AS 'Green Column',
CASE WHEN... THEN... AS 'Orange Column',
CASE WHEN... THEN... AS 'Purple Column',
CASE WHEN... THEN... AS 'Blue Column'

FROM Some_tables

WHERE something = something

ORDER BY

SQL甚至可能吗?提前非常感谢

sql sql-server sql-server-2008-r2 dynamic-sql
1个回答
0
投票

您可以分两个步骤进行操作:1.将所有数据插入中间表Tmp1

SELECT
CASE WHEN... THEN... AS 'Red Column',
CASE WHEN... THEN... AS 'Yellow Column',
CASE WHEN... THEN... AS 'Pink Column',
CASE WHEN... THEN... AS 'Green Column',
CASE WHEN... THEN... AS 'Orange Column',
CASE WHEN... THEN... AS 'Purple Column',
CASE WHEN... THEN... AS 'Blue Column'
Into Tmp1 
FROM Some_tables

2。动态选择表格Tmp1表

@sql = 'select '
if(@variable1 is not null)
begin 
  @sql= @sql + @variable1  + ' , '
end 

if(@variable2 is not null)
begin 
  @sql= @sql + @variable2  + ' , '
end 
 .......
.......
@sql = left(@sql ,len(@sql)-1)  -- this to remove last ","
@sql = @sql  + ' from Tmp1'
© www.soinside.com 2019 - 2024. All rights reserved.