【问题标题】:Multiple SQL Case statements多个 SQL Case 语句
【发布时间】:2018-04-02 06:35:38
【问题描述】:

请帮助我编写脚本以选择以下格式的记录(附图片)。只有标志存储在数据库中。其他列应根据标志选择进行硬编码。我为此创建了一个脚本及其工作,但我想知道是否有更好的方法来做到这一点。这应该在 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 sql-server sql-server-2012


【解决方案1】:

我已经修改为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;

【讨论】:

  • 谢谢!但该解决方案行不通。结果集请查看表格格式。
  • 您在哪个 RDBMS 上运行此查询,因为您没有提到任何地方?
  • Sql Server 2012
  • 我已经修改为sql server
猜你喜欢
  • 2014-08-18
  • 1970-01-01
  • 1970-01-01
  • 2022-06-21
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 2023-02-07
  • 2017-08-15
相关资源
最近更新 更多