【问题标题】:SQL new column count equal column-valuesSQL 新列数等于列值
【发布时间】:2023-03-27 10:40:01
【问题描述】:

我需要你的帮助!

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 查询的解决方案。这是一个 MSSQL Server 2012。SQL 语句 Select * from Table 返回:

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

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

有人知道解决办法吗?

【问题讨论】:

  • 这里的大多数人想要格式化文本,而不是图像(或指向它们的链接)。
  • 向我们展示您当前的查询尝试。并标记您正在使用的 dbms。
  • 添加您期望的输出格式
  • SQL 是一个标准,所以,请说明您也在哪个数据库上工作。
  • 我编辑了问题。

标签: sql database sql-server-2012


【解决方案1】:

这对于窗口聚合很简单:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 窗口函数于 2003 年被添加到 SQL 标准中。遗憾的是,并非所有数据库产品都支持它们。
    • 我爱他们。在你打败我之前,我一直在写一个答案;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2017-05-18
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2022-11-11
    • 2020-12-15
    相关资源
    最近更新 更多