Tsql 如何根据列值是否只有一条记录筛选空值,T-SQL

Tsql 如何根据列值是否只有一条记录筛选空值,T-SQL,tsql,Tsql,我有一个与此相似的数据集: 或者在这里看到: | RECORD_VALUE | RECORD_ATTRIBUTE | | :--- | :--- | | ABC | NULL | | DEF | 123 | | DEF | 456 | | GHI | NULL | | GHI | 789 | 从这张图片中,我想进行过滤,以便保留记录“ABC”的行,但删除记录“GHI”的列B中具有“NULL”值的记录。基本上,对于Col_B中的值不是“NULL”的记录,我只想要有值的记录。但是对于在Col_B

我有一个与此相似的数据集:

或者在这里看到:

| RECORD_VALUE | RECORD_ATTRIBUTE |
| :--- | :--- |
| ABC | NULL |
| DEF | 123 |
| DEF | 456 |
| GHI | NULL |
| GHI | 789 |
从这张图片中,我想进行过滤,以便保留记录“ABC”的行,但删除记录“GHI”的列B中具有“NULL”值的记录。基本上,对于Col_B中的值不是“NULL”的记录,我只想要有值的记录。但是对于在Col_B中只有关联的“NULL”值的记录,我希望保留整个记录


如果有任何想法,我将不胜感激!谢谢

有几种方法可以剥这只猫的皮

一种方法是首先读取数据以获取列B中不为NULL的数据,然后连接回表以获取相关值

然而,这种方法涉及一次数据读取,然后在此基础上进行处理(省去了两次表读取)

上面为Col_A中的每个值找到Col_B的最大值,如果Col_B的所有值都为NULL,则该值将为NULL,否则将为实际值

然后,主要部分对这些行进行排序-当Max_ColB为NULL时报告所有行,或者只有Col_B不为NULL的报告行是Max_ColB有值的


下面是一个包含示例数据和结果的示例。它还包括显示其结果的CTE组件(带有…部分)。

有几种方法可以剥这只猫的皮

一种方法是首先读取数据以获取列B中不为NULL的数据,然后连接回表以获取相关值

然而,这种方法涉及一次数据读取,然后在此基础上进行处理(省去了两次表读取)

上面为Col_A中的每个值找到Col_B的最大值,如果Col_B的所有值都为NULL,则该值将为NULL,否则将为实际值

然后,主要部分对这些行进行排序-当Max_ColB为NULL时报告所有行,或者只有Col_B不为NULL的报告行是Max_ColB有值的

下面是一个包含示例数据和结果的示例。它还包括显示其结果的CTE组件(带有…部分)

WITH A AS
    (SELECT Col_A, 
            Col_B, 
            MAX(Col_B) OVER (PARTITION BY Col_A) AS Max_ColB
      FROM yourtable
    )
SELECT A.Col_A, A.Col_B
FROM  A
WHERE (Max_ColB IS NULL) 
      OR (Max_ColB IS NOT NULL AND Col_B IS NOT NULL);