繁体   English   中英

多个SQL Case语句

[英]Multiple SQL Case statements

请帮助我编写脚本以选择以下格式的记录(附带图片)。 只有标志存储在数据库中。 其他列应根据标志选择进行硬编码。 我已经为此创建了一个脚本及其工作方式,但是我想知道是否有更好的方法可以做到这一点。 这应该在SQL Server 2012中完成

结果:

在此处输入图片说明

DECLARE @temp AS TABLE (Flag1 INT,Flag2 INT,Flag3 INT,Flag4 INT,Flag5 INT,Name VARCHAR(10))
INSERT INTO @temp VALUES (1,0,0,0,0,'aaa'),(0,1,0,0,0,'bbb'),(0,0,1,0,0,'ccc'),(0,0,0,1,0,'ddd'),(1,0,0,0,1,'eee'),
(1,0,0,1,0,'fff'),(0,1,0,1,0,'ggg'),(0,0,1,0,0,'hhh'),(0,0,0,0,1,'iii'),(0,0,0,0,1,'jjj')

SELECT  Flag1,Flag2,Flag3,Flag4,Flag5,
        CASE WHEN flag1=1 THEN 'Id1_col1_item1' END col1 , 
        CASE WHEN flag1=1 THEN 'Id1_col2_item1' END col2, 
        CASE WHEN flag1=1 THEN 'Id1_col3_item1' END col3, 
        CASE WHEN flag1=1 THEN 'Id1_col4_item1' END col4 FROM @temp

        UNION ALL

SELECT  Flag1,Flag2,Flag3,Flag4,Flag5,
        CASE WHEN flag2=1 THEN 'Id2_col1_item1' END col1 , 
        CASE WHEN flag2=1 THEN 'Id2_col2_item1' END col2, 
        CASE WHEN flag2=1 THEN 'Id2_col3_item1' END col3, 
        CASE WHEN flag2=1 THEN 'Id2_col4_item1' END col4 FROM @temp

        UNION ALL 

SELECT  Flag1,Flag2,Flag3,Flag4,Flag5,
        CASE WHEN flag2=1 THEN 'Id2_col1_item1' END col1 , 
        CASE WHEN flag2=1 THEN 'Id2_col2_item1' END col2, 
        CASE WHEN flag2=1 THEN 'Id2_col3_item2' END col3,           
        CASE WHEN flag2=1 THEN 'Id2_col4_item2' END col4 FROM @temp

        UNION ALL 

SELECT  Flag1,Flag2,Flag3,Flag4,Flag5,
        CASE WHEN flag2=1 THEN 'Id2_col1_item1' END col1 , 
        CASE WHEN flag2=1 THEN 'Id2_col2_item1' END col2, 
        CASE WHEN flag2=1 THEN 'Id2_col3_item3' END col3,
        CASE WHEN flag2=1 THEN 'Id2_col4_item3' END col4 FROM @temp

        UNION ALL 

SELECT  Flag1,Flag2,Flag3,Flag4,Flag5,
        CASE WHEN flag2=1 THEN 'Id2_col1_item1' END col1 , 
        CASE WHEN flag2=1 THEN 'Id2_col2_item1' END col2, 
        CASE WHEN flag2=1 THEN 'Id2_col3_item4' END col3,
        CASE WHEN flag2=1 THEN 'Id2_col4_item4' END col4 FROM @temp

        UNION ALL 

SELECT  Flag1,Flag2,Flag3,Flag4,Flag5,
        CASE WHEN flag3=1 THEN 'Id3_col1_item1' END col1 , 
        CASE WHEN flag3=1 THEN 'Id3_col2_item1' END col2, 
        CASE WHEN flag3=1 THEN 'Id3_col3_item1' END col3,
        CASE WHEN flag3=1 THEN 'Id3_col4_item1' END col4 FROM @temp

        UNION ALL 

SELECT  Flag1,Flag2,Flag3,Flag4,Flag5,CASE WHEN flag3=1 THEN 'Id3_col1_item1' END col1 , 
        CASE WHEN flag3=1 THEN 'Id3_col2_item1' END col2, 
        CASE WHEN flag3=1 THEN 'Id3_col3_item2' END col3,
        CASE WHEN flag3=1 THEN 'Id3_col4_item2' END col4 FROM @temp

        UNION ALL 

SELECT  Flag1,Flag2,Flag3,Flag4,Flag5,
        CASE WHEN flag3=1 THEN 'Id3_col1_item1' END col1 , 
        CASE WHEN flag3=1 THEN 'Id3_col2_item1' END col2, 
        CASE WHEN flag3=1 THEN 'Id3_col3_item3' END col3,
        CASE WHEN flag3=1 THEN 'Id3_col4_item3' END col4 FROM @temp

        UNION ALL 

SELECT  Flag1,Flag2,Flag3,Flag4,Flag5,
        CASE WHEN flag3=1 THEN 'Id3_col1_item1' END col1 , 
        CASE WHEN flag3=1 THEN 'Id3_col2_item1' END col2, 
        CASE WHEN flag3=1 THEN 'Id3_col3_item4' END col3,
        CASE WHEN flag3=1 THEN 'Id3_col4_item4' END col4 FROM @temp

        UNION ALL 

SELECT  Flag1,Flag2,Flag3,Flag4,Flag5,
        CASE WHEN flag3=1 THEN 'Id4_col1_item1' END col1 , 
        CASE WHEN flag3=1 THEN 'Id4_col2_item1' END col2, 
        CASE WHEN flag3=1 THEN 'Id4_col3_item1' END col3,
        CASE WHEN flag3=1 THEN 'Id4_col4_item1' END col4 FROM @temp

        UNION ALL 

SELECT  Flag1,Flag2,Flag3,Flag4,Flag5,
        CASE WHEN flag3=1 THEN 'Id5_col1_item1' END col1 , 
        CASE WHEN flag3=1 THEN 'Id5_col2_item1' END col2, 
        CASE WHEN flag3=1 THEN 'Id5_col3_item1' END col3,
        CASE WHEN flag3=1 THEN 'Id5_col4_item1' END col4 FROM @temp

提前致谢

我已将其修改为sql server,请尝试...

 SELECT isnull(Flag1,'') Flag1, isnull(Flag2,'') Flag2, isnull(Flag3,'')
 Flag3, isnull(Flag4,'') Flag4, isnull(Flag5,'') Flag5, 
 (CASE WHEN flag1=1 THEN 'Id1_col1_item1' ELSE 
 CASE WHEN flag2=1 THEN 'Id2_col1_item1' ELSE  
 CASE WHEN flag3=1 THEN 'Id3_col1_item1' 
 ELSE  '' 
 END) AS col1,
 (CASE WHEN flag1=1 THEN 'Id1_col2_item1' ELSE 
 CASE WHEN flag2=1 THEN 'Id2_col2_item1' ELSE  
 CASE WHEN flag3=1 THEN 'Id3_col2_item1' 
 ELSE  '' 
 END) AS col2,
 ..........................
 ..........................
 FROM @temp;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM