【问题标题】:How to get output to not write more SQL CASES using select query如何使用选择查询获取输出以不编写更多 SQL 案例
【发布时间】:2022-11-10 16:47:40
【问题描述】:

我有以下 xyz 表数据

id    ADivision     BDivision   CDivision     DDivision  EDivision     FDivision
 1       0              1           0           0            1           0
 2       1              1           0           0            1           1

我想要如下输出

 id    Divisions
 1     B-E
 2     A-B-E-F

我尝试使用 switch case 但需要编写更多案例

任何其他获得输出的方法

【问题讨论】:

  • 您当前的查询是什么样的?需要明确的是,您是否正在寻找一种更短和/或更灵活的方式来实现您的输出?
  • 老实说,CASEIIF 是你想要的。
  • 我知道 sql CASE WHEN 语句以任何其他方式来实现更短的方式是的。 @孤立
  • 我想在一个字段中显示分区,如上面的输出。 @拉努
  • 所以CONCATenate 输出,@mazharkhan。

标签: sql sql-server


【解决方案1】:

CONCAT_WS() 函数是你的朋友:

SELECT
    id,
    CONCAT_WS('-', CASE WHEN ADivision = 1 THEN 'A' END,
                   CASE WHEN BDivision = 1 THEN 'B' END,
                   CASE WHEN CDivision = 1 THEN 'C' END,
                   CASE WHEN DDivision = 1 THEN 'D' END,
                   CASE WHEN EDivision = 1 THEN 'E' END,
                   CASE WHEN FDivision = 1 THEN 'F' END) AS Divisions
FROM yourTable
ORDER BY id;

以下是可能不支持 CONCAT_WS() 的 SQL Server 早期版本的解决方法:

SELECT
    id,
    STUFF(
        COALESCE('-' + CASE WHEN ADivision = 1 THEN 'A' END, '') +
        COALESCE('-' + CASE WHEN BDivision = 1 THEN 'B' END, '') +
        COALESCE('-' + CASE WHEN CDivision = 1 THEN 'C' END, '') +
        COALESCE('-' + CASE WHEN DDivision = 1 THEN 'D' END, '') +
        COALESCE('-' + CASE WHEN EDivision = 1 THEN 'E' END, '') +
        COALESCE('-' + CASE WHEN FDivision = 1 THEN 'F' END, '')
        1, 2, '') AS Divisions
FROM yourTable
ORDER BY id;

【讨论】:

  • 伟大的逻辑谢谢你是男人。 @蒂姆·比格莱森
  • @mazharkhan 看看上面更新的答案。
  • STUFF() 的目的是删除任何可能的前导 -
猜你喜欢
  • 1970-01-01
  • 2021-09-06
  • 2018-11-01
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 2022-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多