我有一个包含date
列和3个其他不同列的表:X
,Y
,Z
。
我希望获取上个月的date
,X
和Y
,并在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());
date | X | Y | Z
-----------+---+---+---
2019-08-01 | 8 | 8 | 12
date
,X
和Y
仅用于上个月,Z
是所有时间的总和(1 + 1 + 2 + 8 = 12)
我在Microsoft SQL Server Management Studio中收到以下错误:
子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。
答案 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()))
正如所有其他人所建议的那样,提供样本数据和预期的输出会有所帮助。