查询具有不同条件的多列

时间:2019-09-12 15:29:05

标签: sql sql-server

我有一个包含date列和3个其他不同列的表:XYZ
我希望获取上个月的dateXY,并在z列中获取所有先前日期的总和。

这是我处理过的查询

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());

以下是示例数据: enter image description here 这就是我想要的结果是这样的:

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

dateXY仅用于上个月,Z是所有时间的总和(1 + 1 + 2 + 8 = 12)

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

  

子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。

2 个答案:

答案 0 :(得分:0)

没有数据,很难为您提供解决方案,但是我的建议是使用以下查询,该查询将为您提供上个月的X和Y,同时根据条件为您提供所有z

select 
(select Top 1 X from table where ... order by ... desc) AS X, 
(select Top 1 Y from table where ... order by ... desc) AS Y,
Z
FROM table
WHERE ....

答案 1 :(得分:0)

这是您想要的结果吗?

    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())) 

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