在SQL Server中使用COALESCE(或类似的东西)和GROUP BY

时间:2015-03-31 03:22:20

标签: sql sql-server

我认为我遗漏了一些基本知识,如何有效地使用GROUP BY来消除冗余记录。我一直在打击我需要使用COALESCE的地方,除了我能说的最好不能使用GROUP BY。

示例:我有一个表格,其中包含visitID和visitBillingCode的每个组合以及其他有用的信息:

VisitID    SearchRank1    SearchRank2   BillingID
--------------------------------------------------
1          34             NULL          3432
1          34             NULL          3467
2          27             8             3280
2          29             NULL          2903

我想将其崩溃,以便每个VisitID只有一行。方便的是,我甚至乐意在播放多行时只取其他列的最大非空值,这样我就得到了这样的结果:

VisitID    SearchRank1    SearchRank2   BillingID
--------------------------------------------------
1          34             NULL          3467
2          29             8             3280

似乎应该可以通过以下方式获得:

SELECT VisitID, 
       COALESCE(SearchRank1) AS SearchRank1, 
       COALESCE(SearchRank2) AS SearchRank2,
       MAX(BillingID) AS BillingID
FROM Db.Table1
GROUP BY VisitID

但是当我尝试它时,我在合并线中出现错误,我认为这只是因为我实际上无法使用group by来合并。它是否正确?如果是这样,有什么方法可以做到这一点?

1 个答案:

答案 0 :(得分:3)

只需使用max()min()

SELECT VisitID, 
       MAX(SearchRank1) AS SearchRank1, 
       MAX(SearchRank2) AS SearchRank2,
       MAX(BillingID) AS BillingID
FROM Db.Table1
GROUP BY VisitID;

COALESCE()不是聚合函数。但是,聚合函数通常忽略NULL值,因此它们具有类似的效果。

您可以将COALESCE()用于以下内容:

select VisitId, coalesce(SearchRank2, SearchRank1)
from db.table1;