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);