如何在这个特定的T-SQL查询中使用表变量?
我使用的是SQL Server 2012,下面的T-SQL查询是针对数据库中的一个表运行的。查询运行正常,但我的问题是我希望获得几个特定日期的输出。我希望它将@Date值存储在某处,并在查询中实现逻辑,而不是通过每次更改@Date变量的值来多次运行查询。我该怎么做 我最初的疑问如下:如何在这个特定的T-SQL查询中使用表变量?,sql,sql-server,tsql,table-variable,Sql,Sql Server,Tsql,Table Variable,我使用的是SQL Server 2012,下面的T-SQL查询是针对数据库中的一个表运行的。查询运行正常,但我的问题是我希望获得几个特定日期的输出。我希望它将@Date值存储在某处,并在查询中实现逻辑,而不是通过每次更改@Date变量的值来多次运行查询。我该怎么做 我最初的疑问如下: DECLARE @Date date; SET @Date = '20180630'; SELECT @Date, COUNT(*) AS Employees FROM RavEmpID WHERE DateOf
DECLARE @Date date;
SET @Date = '20180630';
SELECT @Date, COUNT(*) AS Employees
FROM RavEmpID
WHERE DateOfEntry <= @Date
AND (DateLeft > @Date
OR DateLeft IS NULL);
Date
2015-11-30
2015-12-31
2016-01-31
2016-02-29
...
SELECT b.[Date], COUNT(*) AS Employees
FROM RavEmpID a
left join TableVariable b on b.[Date] = a.[DateLeft]
WHERE a.DateOfEntry <= b.[Date]
AND (a.DateLeft > b.[Date]
OR a.DateLeft IS NULL)
GROUP BY b.[Date]
我的新T-SQL现在如下所示:
DECLARE @Date date;
SET @Date = '20180630';
SELECT @Date, COUNT(*) AS Employees
FROM RavEmpID
WHERE DateOfEntry <= @Date
AND (DateLeft > @Date
OR DateLeft IS NULL);
Date
2015-11-30
2015-12-31
2016-01-31
2016-02-29
...
SELECT b.[Date], COUNT(*) AS Employees
FROM RavEmpID a
left join TableVariable b on b.[Date] = a.[DateLeft]
WHERE a.DateOfEntry <= b.[Date]
AND (a.DateLeft > b.[Date]
OR a.DateLeft IS NULL)
GROUP BY b.[Date]
运行此查询时,我的输出为零。我做错了什么?您的加入基于
b.[Date] = a.[DateLeft]
a.DateLeft > b.[Date]
但是where子句是基于
b.[Date] = a.[DateLeft]
a.DateLeft > b.[Date]
所以没有逻辑去获取记录。
试试这个:
SELECT b.[Date], COUNT(*) AS Employees
FROM RavEmpID a
inner join TableVariable b on b.[Date] = a.[DateLeft]
WHERE a.DateOfEntry <= b.[Date]
您需要对查询进行一些更改: 将所有原始WHERE条件移到ON子句中 使日期表成为左联接中的第一个表,因为您希望保留所有这些日期 更改``COUNT`使其计算匹配项 生成的查询:
SELECT d.[Date], COUNT(r.DateOfEntry) AS Employees
FROM TableVariable d LEFT JOIN
RavEmpID r
ON r.DateOfEntry <= d.[Date] AND
(r.DateLeft > d.[Date] OR r.DateLeft IS NULL)
GROUP BY d.[Date]
GROUP BY d.[Date];
注意,我还将表别名从任意字母更改为表名的缩写。这使得查询更易于阅读。我认为问题可能在于联接,因为TableVariable中可能没有任何日期与Ravenpid表中的DateLeft匹配。如果我删除连接,我该如何解决这个问题?它确实为TableVariable表中的每个日期提供了一个输出,但数字不正确。事实上,我需要它来提供TableVariable表中日期的员工总数。例如,对于日期2017-11-30,我需要尚未离开的员工总数。ie:他们的左日期>2017-11-30非常感谢!正是我需要的。我认为您需要将第一行中的b.[Date]更改为d.[Date]。