【问题标题】:How to create a summary table?如何创建汇总表?
【发布时间】:2018-09-18 14:37:21
【问题描述】:

我有行:

PLACE   DATE_OPEN   SUM
-----------------------
PLACE1  03.09.2018  2
PLACE2  03.09.2018  2
PLACE1  04.09.2018  8
PLACE1  05.09.2018  9
PLACE2  05.09.2018  1

我使用此 SQL 查询获取行:

SELECT
    SB AS [PLACE], 
    CAST(OPEN_TIME AS DATE) AS [DATE_OPEN], 
    COUNT(ID) AS [SUM]
FROM
    [Table]
WHERE
    SB IN ('PLACE1', 'PLACE2')
GROUP BY 
    SB, CAST(OPEN_TIME AS DATE)

我想得到一个汇总表形式的表,用SQL可以做到吗?

所需输出的示例:

PLACE   DATE_OPEN   
        03.09.2018  04.09.2018  05.09.2018
PLACE1  2           8           9
PLACE2  2                       1

【问题讨论】:

  • 谷歌:“SQL Server 动态 SQL”。
  • 这似乎是报告数据。在 SSRS 中使用矩阵。但我建议切换行和列,这样你就有一个已知的宽度和无限的行。
  • 你应该调用一个列SUM - 特别是如果它包含一个计数 ......首先,@987654325 @ 是保留的 T-SQL 关键字,“重复使用”这些非常通用的名称总是一个坏主意 - 使用 更具表现力,在您的情况下更有用的东西。并且调用包含 count SUM 的列违反了最小意外原则 - 要么是总和,要么是计数 - 但不要混淆这些含义 -这将使您的代码更难理解和维护!

标签: sql sql-server sql-server-2008 sql-server-2012


【解决方案1】:

最接近的是 PIVOT:

WITH Demo AS
(
    SELECT * FROM (VALUES
    ('PLACE1', '03.09.2018', 2),
    ('PLACE2', '03.09.2018', 2),
    ('PLACE1', '04.09.2018', 8),
    ('PLACE1', '05.09.2018', 9),
    ('PLACE2', '05.09.2018', 1)) T(PLACE, DATE_OPEN, [SUM])
)
SELECT * FROM Demo
PIVOT (SUM([Sum]) FOR Date_Open IN ([03.09.2018],[04.09.2018],[05.09.2018])) P

结果

PLACE  03.09.2018  04.09.2018  05.09.2018
------ ----------- ----------- -----------
PLACE1 2           8           9
PLACE2 2           NULL        1

【讨论】:

    猜你喜欢
    • 2014-09-08
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 2023-04-03
    • 2020-02-27
    相关资源
    最近更新 更多