【问题标题】:How can I get a query displayed monthly with a subquery如何使用子查询每月显示查询
【发布时间】:2022-01-26 11:14:25
【问题描述】:

我在这里有一个带有子查询的查询。这向我展示了今年的完整结果。我如何让它每月显示给我。我尝试了一些方法,但总是收到错误消息

这是我的查询

SELECT 
    masch_nr, SUM(dauer) AS Prozess_Verfügbarkeit,
    (SELECT SUM(dauer)
     FROM [hydra1].[hydadm].[ereignis]
     WHERE YEAR(begin_ts) = YEAR(CURRENT_TIMESTAMP)
       AND masch_nr = 'FIMI1'
       AND bmktonr IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11')) AS Verfügbarkeit
FROM 
    [hydra1].[hydadm].[ereignis]
WHERE 
    YEAR(begin_ts) = YEAR(CURRENT_TIMESTAMP)
    AND masch_nr = 'FIMI1'
    AND bmktonr IN ('7', '11')
GROUP BY 
    masch_nr

结果应该是这样的:

Month | Prozess_Verfügbarkeit | Verfügbarkeit
------+-----------------------+--------------
 1    |         344           |     4556
 2    |         445           |     5654

谢谢

【问题讨论】:

  • 提问时,您需要提供minimal reproducible example: (1) DDL 和样本数据填充,即 CREATE 表和 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上述#1 中的样本数据。 (4) 您的 SQL Server 版本 (SELECT @@version;)。
  • 大概你过滤年份和月份。不知道你是如何得到两行的。
  • 使用case 过滤bmktonr IN ('7','11) 的总和比调用子查询更有意义。

标签: sql sql-server tsql


【解决方案1】:

您可以通过使用条件聚合来简化此操作

SELECT 
  YEAR(begin_ts) AS [Year] 
, MONTH(begin_ts) AS [Month] 
, masch_nr
, SUM(CASE WHEN bmktonr IN ('7', '11') 
      THEN dauer END) AS Prozess_Verfügbarkeit
, SUM(CASE WHEN bmktonr IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11') 
      THEN dauer END) AS Verfügbarkeit
FROM [hydra1].[hydadm].[ereignis]
WHERE masch_nr = 'FIMI1'
  AND begin_ts >= DATEADD(YEAR,DATEDIFF(YEAR,0,CURRENT_TIMESTAMP),0)
  AND begin_ts <  DATEADD(YEAR,DATEDIFF(YEAR,0,CURRENT_TIMESTAMP)+1,0)
GROUP BY YEAR(begin_ts), MONTH(begin_ts), masch_nr
ORDER BY [Year], [Month], masch_nr

【讨论】:

  • 好的,谢谢。有用。 :-)
  • @Rene 你熟悉“接受”答案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
相关资源
最近更新 更多