sql - 有没有办法简化这个 TSQL Case 语句?

标签 sql t-sql case

是否有更简单的方法在 select 中编写 case 语句,或者这是唯一的方法? 基本上如果 COL B 和 COL C 不为 NULL,则 col b - col c,如果其中一个为 null,则选择另一个。

SELECT
    COL_A AS [A],
    CASE WHEN NULLIF(COL_B, '') IS NOT NULL AND NULLIF(COL_C, '') IS NOT NULL
             THEN CONCAT(COL_B, ' - ', COL_C)
         WHEN NULLIF(COL_B, '') IS NULL AND NULLIF(COL_C, '') IS NOT NULL
             THEN COL_C
         WHEN NULLIF(COL_B, '') IS NOT NULL AND NULLIF(COL_C, '') IS NULL
             THEN COL_B
     END AS [B]

最佳答案

Basically if COL B AND COL C are not NULL, THEN col b - col c, if one is null, select the other.

使用CONCAT_WS :

SELECT CONCAT_WS(' - ', COL_B, COL_C) AS [B]

<强> db<>fiddle demo

关于sql - 有没有办法简化这个 TSQL Case 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72663011/

相关文章:

python - Django - 使用具有多对多关系的嵌套序列化程序发送发布请求。获取 [400 错误代码] "This field may not be null] error"

sql - postgresql 中的 boolean 通配符

mysql - sql LIKE 子句哪里出错了?

t-sql - 如何使用SQL来匹配并删除字符串后面的所有内容?

sql-server - 将 .MDF 文件与服务器数据库 T-SQL 同步

postgresql - Postgres - 像任何 UPPER()

mysql - 返回第一个结果的 GROUP BY 函数

sql - SSRS - Group_Concat 等效于使用表达式吗?

Cakephp 使用 WHEN CASE 进行查询

MySQL ORDER BY 取决于 CASE 顺序 ASC 或 DESC