mysql - SQL case 语句 - 多个条件

标签 mysql sql sql-server case

我正在编写一个案例语句,我需要在其中检查列并分配一个值。但是,如果一行符合多个案例怎么办?例如在下表中,我想在 COLA 和/或 COLB 为 null 时分配一个桶;所以在第一种情况下两者都是 NULL ,那么当 COLA 和 COLB 为空时,我将如何告诉 SQL case 语句分配“两者都是 NULL ”。当 COLA 或 COLB 为 null 时,我可以轻松分配。在我的工作中,我正在检查 8 列,所以我需要找到每个组合和正确的案例?必须有一个简单的方法。

**RowNumber     COLA                  COLB                Case**
1                   Null                  Null               **Both are NULL** 
2                   Null                  B                        A is null
3                   A                 Null                 B is null 
4                   AA                BB                   NULL
5                   CC                Null                 B is null 

最佳答案

鉴于您有 8 列,您可能需要执行以下操作:

WITH t AS (
    SELECT
        CASE WHEN (colA IS NULL AND colB IS NULL AND colC IS NULL AND colD IS NULL AND 
                   colE IS NULL AND colF IS NULL AND colG IS NULL AND colH IS NULL) THEN 'ALL' ELSE '' END [ALL],
        CASE WHEN colA IS NULL THEN 'A' ELSE '' END [A],
        CASE WHEN colB IS NULL THEN 'B' ELSE '' END [B],
        CASE WHEN colC IS NULL THEN 'C' ELSE '' END [C],
        CASE WHEN colD IS NULL THEN 'D' ELSE '' END [D],
        CASE WHEN colE IS NULL THEN 'E' ELSE '' END [E],
        CASE WHEN colF IS NULL THEN 'F' ELSE '' END [F],
        CASE WHEN colG IS NULL THEN 'G' ELSE '' END [G],
        CASE WHEN colH IS NULL THEN 'H' ELSE '' END [H] 
        FROM
            <TABLENAME>)                                

SELECT 
    CASE WHEN [ALL] = 'ALL' THEN 'ALL are NULL'
    ELSE [ALL] + ',' + A + ',' + B + ',' + C + ',' + D + ',' 
               + E + ',' + F + ',' + G + ',' + H + ' are NULL' 
END
FROM T

在最后的 select 语句中,您可以根据需要进行进一步的更改以显示结果。

关于mysql - SQL case 语句 - 多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18128331/

相关文章:

sql - 在更新语句中使用 SUM where criteria

mysql - 在 SQL 中连接两个表并返回包含空值的结果集

sql - 从不同的另一个 View 创建一个 View 并计算一些字段

mysql - 插入 MySQL 表或更新(如果存在)

PHP 在不使用 my_sql_connect 的情况下包含 mysql 查询

mysql - 如何获取mysql中最后一条之前的最后一条记录?

mysql - docker-compose mysql aio写入错误W10

C# 安全地构建 SQL 字符串以使用 Entity Framework 执行

c# - 是否有一种设计模式可以帮助比较大量数据?

从当年开始的 SQL 日期范围