【发布时间】:2017-06-15 17:16:01
【问题描述】:
下面我有一个带有两个基本 SELECT 语句的变量。如果用户只能使用一个变量 @StartDate 来输入日期参数,那么如何循环查询以仅使用一个 SELECT 语句而不是如下所示的两个。因此,假设您没有两个查询,而是一个查询,它只能运行一次,但满足下面 WHERE 子句中的两个条件,即“FullDate = @StartDate”和“Fulldate BETWEEN DATEADD(mm, DATEDIFF( mm, 0, @StartDate), 0) 和 @StartDate”。所以,基本上我试图将两个 SELECT 语句压缩为一个,并提供来自两个查询的相关数据。此处不能使用 UNION ALL。
DECLARE @StartDate DATE = '20170610'
SELECT
FirstName,
LastName,
SUM(MoneySpent) AS 'Spent'
FROM
TableOne
WHERE
FullDate = @StartDate;
GROUP BY FirstName, LastName
SELECT
FirstName,
LastName,
SUM(MoneySpent) AS 'Spent'
FROM
TableOne
WHERE
Fulldate BETWEEN DATEADD(mm, DATEDIFF(mm, 0, @StartDate), 0) AND @StartDate;
GROUP BY FirstName, LastName
【问题讨论】:
-
你确定 Fulldate = DATEADD(mm, DATEDIFF(mm, 0, @StartDate), 0) AND @StartDate 是正确的吗?
-
Fulldate = DATEADD(mm, DATEDIFF(mm, 0, @StartDate), 0) AND @StartDate没有意义。你是说这两者之间? (例如,在@StartDate 和@StartDate 的月初之间?) -
关于 BETWEEN 您需要了解的一点是它包含端点,第一个选择中的任何内容都将按原样出现在您的第二个选择中,因此只需删除第一个选择即可。
标签: sql sql-server tsql