数据集SQL Server中不同ID的计数

时间:2018-10-18 07:50:43

标签: sql sql-server

这是示例查询:

我想要的是针对每个记录填充的每个RWL的不同ID的计数。

我想在一个查询中执行此操作,因为我的实际数据集很大。

create table temp_ayush
(id int,
RWL varchar(10),
cost int)

insert into temp_ayush
values
(1,'ABC',100),
(1,'ABC',200),
(2,'XYZ',300),
(2,'ABC',100)

select * 
,count(id) over (partition by RWL)
from temp_ayush

4 个答案:

答案 0 :(得分:1)

与其按RWL进行分区,不如使用GROUP BYCOUNT DISTINCT,就像这样:

select RWL
,count(distinct id) 
from temp_ayush
group by RWL

请注意,因为它使用GROUP BY,所以您只能选择group by子句中包含的列。

如果您需要其他列,我建议在连接中使用以上内容,例如:

SELECT  RWL,
        IdCount,
        Cost
FROM    temp_ayush
JOIN    (    select RWL
            ,count(distinct id) 
            from temp_ayush
            group by RWL
        )   T
ON      T.RWL = RWL

答案 1 :(得分:1)

create table #temp_ayush
(id int,
RWL varchar(10),
cost int)

insert into #temp_ayush
values
(1,'ABC',100),
(1,'ABC',200),
(2,'XYZ',300),
(2,'ABC',100)

select t.* 
,c.Cnt
from #temp_ayush t
    JOIN (
        SELECT RWL, COUNT (DISTINCT ID) AS Cnt
        FROM #temp_ayush
        GROUP BY RWL
    ) c ON c.RWL = t.RWL

drop table #temp_ayush

答案 2 :(得分:0)

尝试以下查询之一:

1)如果要模仿窗口功能(count(distinct ..)不能用作窗口功能),请使用:

select id,
       RWL,
       (select count(distinct ID) from temp_ayush where RWL = ta.RWL) countDistinct,
       cost
from temp_ayush ta

2)如果要分组,请使用:

select RWL, count(distinct ID) from temp_ayush
group by RWL

答案 3 :(得分:0)

我认为您想要一个相关的子查询:

select  *, (select count(distinct id) from #temp_ayush b where a.rwl = b.rwl)
from    #temp_ayush a