SQL新列计数等于列值

时间:2017-11-20 14:17:42

标签: sql database sql-server-2012

我需要你的帮助!

count   Day         Title      Sum
1       02.10.2017  Urlaub     400
2       03.10.2017  Feiertag   400
2       03.10.2017  0          400
4       04.10.2017  11210      400
4       04.10.2017  11210      400
4       04.10.2017  0          400
4       04.10.2017  0          400
2       05.10.2017  0          400
2       05.10.2017  0          400

我需要像上面的表一样使用SQL-Query进行解析。这是一个MSSQL Server 2012. SQL语句从表中选择* 返回:

Day         Title      Sum
02.10.2017  Urlaub     400
03.10.2017  Feiertag   400
03.10.2017  0          400
04.10.2017  11210      400
04.10.2017  11210      400
04.10.2017  0          400
04.10.2017  0          400
05.10.2017  0          400
05.10.2017  0          400

所以我想添加列数,它表示cloumn Day 相等的数据集数量。

有人知道解决方案吗?

2 个答案:

答案 0 :(得分:2)

这与窗口聚合很简单:

declare @t table (Day date not null, Title varchar(30) not null, Sum int not null)
insert into @t(Day,Title,Sum) values
('20171002','Urlaub',400),
('20171003','Feiertag',400),
('20171003','0',400),
('20171004','11210',400),
('20171004','11210',400),
('20171004','0',400),
('20171004','0',400),
('20171005','0',400),
('20171005','0',400)

select
    *,
    COUNT(*) OVER (PARTITION BY Day)
from
    @t

结果:

Day        Title                          Sum         
---------- ------------------------------ ----------- -----------
2017-10-02 Urlaub                         400         1
2017-10-03 Feiertag                       400         2
2017-10-03 0                              400         2
2017-10-04 11210                          400         4
2017-10-04 11210                          400         4
2017-10-04 0                              400         4
2017-10-04 0                              400         4
2017-10-05 0                              400         2
2017-10-05 0                              400         2

答案 1 :(得分:1)

这个问题已经得到了解答,但是我将添加我的2cents,其答案不使用窗口函数,但是相关的子查询应该可以在不同的DBMS中使用

SELECT  (SELECT COUNT(day) FROM YourTable WHERE day = t.day),
        day,
        title,
        sum     
FROM    YourTable t
ORDER BY day