我认为我遗漏了一些基本知识,如何有效地使用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来合并。它是否正确?如果是这样,有什么方法可以做到这一点?
答案 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;