如何通过Inner Join去除重复TotalSale值,仅保留匹配组首行值?
同一单据组仅首行显示TotalSale的SQL解决方案
当前通过内连接关联SalesTable和PricesTable后,同一DocType+DocNumber组内的TotalSale会重复出现在每一行,要实现仅组内首行显示该值、其余行为空的效果,可以借助窗口函数ROW_NUMBER()来实现:
修改后的查询语句
SELECT ST.ProductID ,ST.DocType ,ST.DocNumber ,ST.UnitPrice ,CASE WHEN ROW_NUMBER() OVER (PARTITION BY ST.DocType, ST.DocNumber ORDER BY ST.ProductID) = 1 THEN PT.TotalSale ELSE NULL END AS TotalSale FROM SalesTable ST INNER JOIN PricesTable PT ON ST.DocNumber = PT.DocNumber AND ST.DocType = PT.DocType -- 补充DocType匹配,确保关联准确性
关键逻辑说明
PARTITION BY ST.DocType, ST.DocNumber:按单据类型和单据编号分组,确保同一组的行被归为一类ORDER BY ST.ProductID:定义组内的排序规则,决定哪一行作为"首行"(可根据实际业务需求替换为其他字段,比如创建时间等)CASE判断:当组内行编号为1时,显示TotalSale值,否则返回NULL
内容的提问来源于stack exchange,提问作者Roy Givenchi
相关产品推荐
相关产品推荐

