我可以在一个查询中 Select 2 列上的 DISTINCT 和按 1 列分组的 Sum 吗?

Can I Select DISTINCT on 2 columns and Sum grouped by 1 column in one query?

是否可以编写一个查询,我将在 table 中按 2 列分组以获得成员总数加上同一 table 中一列的总和,但按一列分组?

比如数据是这样的

我想计算“OHID”和“MemID”列的不同组合,并获得按 OHID 分组的“金额”列的总和。结果应该是这样的

我能够使用下面的查询得到正确的计数

SELECT count(*) as TotCount
from (Select DISTINCT OHID, MemID
      from #temp) AS TotMembers

但是,当我尝试使用下面的查询将所有结果放在一起时,我得到的计数为 15,总和完全不同。

SELECT t.OHID,
       count(TotMembers.MemID) as TotCount,
       sum(t.Amount) as TotalAmount
from (Select DISTINCT OHID, MemID
      from #temp) AS TotMembers
join #temp t on t.OHID =  TotMembers .OHID
GROUP by t.OHID

如果我没理解错的话,你想将 NULL 视为有效值。剩下的只是聚合:

select t.ohid,
       (count(distinct t.memid) +
        (case when count(*) <> count(t.memid) then 1 else 0 end)
       ) as num_memid,
       sum(t.amount) as total_amount
from #temp t
group by t.ohid,

case 逻辑可能有点令人反感。如果任何值为 NULL.

,它只是添加 1

您可能会发现这更容易通过两个级别的聚合来遵循:

select t.ohid, count(*), sum(amount)
from (select t.ohid, t.memid, sum(t.amount) as amount
      from #temp t
      group by t.ohid, t.memid
     ) t
group by t.ohid