sql - 只有在没有其他记录时才保留空记录
问题描述
鉴于下表,我如何编写一个查询,我为每个类别和代码保留,如果没有“产品来自”值的记录,则只有“产品来自”的记录为空?
> Category | Code | Product From | Product To
> :--------|------|--------------|----------
> Sports | A | ProdA | ProdB
> Sports | A | NULL | ProdB
> Sports | A | ProdX | ProdB
> Sports | B | NULL | ProdB
> Sports | C | ProdC | ProdD
> Sports | C | NULL | ProdD
由于对于代码 A,ProdB 有两个“产品来源”,因此应删除带有 NULL 作为“产品来源”的行。对于代码 C,情况相同,但对于代码 B,应保留 ProdB,因为它没有“Product From”。
预期结果:
> Category | Code | Product From | Product To
> :--------|------|--------------|----------
> Sports | A | ProdA | ProdB
> Sports | A | ProdX | ProdB
> Sports | B | NULL | ProdB
> Sports | C | ProdC | ProdD
解决方案
另一种选择是使用WITH TIES
.
例子
Select top 1 with ties *
From mytable
Order by row_number() over (Partition by Category,Code,Product_To Order by Product_From desc)
退货
Category Code Product_From Product_To
Sports A ProdA ProdB
Sports B NULL ProdB
Sports C ProdC ProdD