首页 > 解决方案 > 查询具有不同条件的多个列

问题描述

我有一个包含date列和其他 3 个不同列的表:XYZ
我想要获取上个月的 , 和dateX所有以前日期的总和。Yz

这是我处理的查询

SELECT date,
  x,
  y,
  (
    SELECT z
    FROM Table
    WHERE date < DATEADD(DAY, -(DAY(GETDATE())), GETDATE())
  )
FROM Table
WHERE date BETWEEN DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) - 1, 0) AND
      DATEADD(DAY, -(DAY(GETDATE())), GETDATE());

这是一个示例数据: 在此处输入图像描述 这是我希望结果的样子:

date       | X | Y | Z
-----------+---+---+---
2019-08-01 | 8 | 8 | 12

,且仅适用于上个月和date所有时间的总和 (1+1+2+8=12)XYZ

我在 Microsoft SQL Server Management Studio 中收到以下错误:

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

标签: sqlsql-server

解决方案


这个结果是你想要的吗?

    SELECT date, x, y, z FROM Table
WHERE date BETWEEN DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) - 1, 0) 
            AND
            DATEADD(DAY, -(DAY(GETDATE())), GETDATE());
UNION ALL
SELECT date,x,y,z FROM Table WHERE date < DATEADD(DAY, -(DAY(GETDATE())), GETDATE())) 

正如所有其他人所建议的那样,提供样本数据和预期输出会更有帮助。


推荐阅读