【问题标题】:Merge rows into one row - SQL 11g将行合并为一行 - SQL 11g
【发布时间】:2022-01-15 06:13:57
【问题描述】:

嗯,我有一张这样的桌子:

     ID DATETIME             FK_FEDERAL_STATE     FK_ACCOMODATION   ARRIVALS     NIGHTS
---------- -------------------- -------------------- --------------- ---------- ----------
    123185 200010               W96-5                             61       2433      16111
    123186 200010               W96-5                             86       3718      30319
    123187 200010               W96-5                             87       1100       8487

一个提示:日期时间 = 前 4 个数字 = 年 + 后 2 个数字 = 月

到目前为止一切顺利。

这是我的 SQL 语句:

SELECT DATETIME, SUM(NIGHTS) AS NIGHTS FROM dwh_data GROUP BY ROLLUP(DATETIME);

这让我的每个 DATETIME 看起来像这样:

DATETIME                 NIGHTS
-------------------- ----------
202008                 17994407
202009                  9895439
202010                  4347704
202011                  1075204

如您所见,我的 SQL 查询显示了每个月的夜晚。是否可以总结一年中的所有夜晚,所以 f.e.

    DATETIME                 NIGHTS
    -------------------- ----------
    2018                 117994407
    2019                  19895439
    2020                  14347704
                        

【问题讨论】:

    标签: sql oracle11g oracle-sqldeveloper


    【解决方案1】:

    转换为日期,然后按转换日期的年份分组:

    GROUP BY YEAR(TO_DATE(DATETIME, 'YYYYMM'))
    

    或者您可以按仅查看前 4 个字符的子字符串进行分组:

    GROUP BY SUBSTR(DATETIME, 1, 4)
    

    【讨论】:

    • 如何在我的查询中实现。我尝试了他们两个,他们都没有工作
    • 你得到了什么结果?您看到错误了吗?
    • 也许我的问题不清楚。查看我编辑的问题以查看我想要得到的结果
    • 您想要的输出没有意义 - 您提供的表格样本中没有这些年份。此答案将按年份对您的结果进行分组,您只需更改 SELECT 语句,以便您只能看到年份。
    • 这就是问题所在。也许您可以编辑您的答案,以便我批准您的问题
    【解决方案2】:

    您可以尝试 GROUPING SETS 以按 YEAR 和 DATETIME 获取小计。

    SELECT SUBSTR(DATETIME, 1, 4) year, DATETIME, SUM(NIGHTS) AS NIGHTS 
    FROM dwh_data 
    GROUP BY GROUPING SETS ((SUBSTR(DATETIME, 1, 4), DATETIME), (SUBSTR(DATETIME, 1, 4)) ) ;
    

    【讨论】:

    • 首先,看看我想要得到的结果,看看你的查询得到的结果。此外,您删除了我想在查询中使用的 ROLLUP
    • 您无需 ROLLUP 即可在问题中获得所需的输出。正如@Bashton 建议的那样,只需GROUP BY SUBSTR(DATETIME, 1, 4)
    【解决方案3】:

    试试这个:

    SELECT SUBSTR(DATETIME, 1, 4) AS YEAR, SUM(NIGHTS) AS NIGHTS FROM dwh_data GROUP BY SUBSTR(DATETIME, 1, 4);
    

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2022-01-14
      • 2011-12-21
      • 1970-01-01
      • 2015-09-05
      • 2017-09-24
      • 2021-05-01
      • 2019-01-14
      • 1970-01-01
      相关资源
      最近更新 更多