【问题标题】:How to Compare Rows in same table with default row of each?如何将同一表中的行与每个表的默认行进行比较?
【发布时间】:2020-04-04 17:50:35
【问题描述】:

我有一些关于选择有组的问题,如果不存在,每个组 WHERE 由“Data1”表示,WHERE 由“NULL 或 Empty”表示,否则不显示

例子:

Table T1         Table when data='00001'    Table when data='00002'    Table when data=''
Col1 Col2        Col1 Col2                  Col1 Col2                  Col1 Col2
A    00001       A    00001                 A    NULL                  A    NULL
A    NULL        B    00001                 B    00002                 B    NULL
B    00002       C    00001                 D    NULL                  D    NULL
B    00001       D    NULL                  E    00002                 E    NULL
B    NULL        E    NULL
C    00001
D    NULL
E    00002
E    NULL

我的想法是选择表,其中通过数据和与选择表联合,其中 Col2=null 和 Col1 不在第一次选择中

WITH T1 AS
(
    SELECT * FROM Table WHERE Col2='00001'
)
SELECT * FROM T1
UNION
SELECT * FROM Table T2
WHERE T2.Col1 NOT IN (SELECT Col1 FROM T1) AND ISNULL(T2.Col2,'')=''

但是如果我有 30k 条记录,那就太慢了

【问题讨论】:

    标签: sql sql-server tsql group-by where-clause


    【解决方案1】:

    使用布尔逻辑并进行聚合:

    SELECT col, MAX(col2) AS col2
    FROM table t
    WHERE (col = '00001' OR col IS NULL)
    GROUP BY col;
    

    对于多重过滤器:

    WHERE (col IN ('00001', '00002', '') OR col IS NULL)
    

    【讨论】:

      【解决方案2】:

      你可以使用聚合:

      select
          col1,
          max(col2) col2
      from mytable
      where col2 = '00001' or col2 is null
      group by col1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-12
        • 1970-01-01
        • 2021-10-26
        • 1970-01-01
        相关资源
        最近更新 更多