【发布时间】:2016-12-26 00:15:02
【问题描述】:
我有一个包含 5 列的表格 Emp、Surname、CSD、Term Rsn 和 Date。前 4 列将保持不变,但日期会改变,例如。 Emp 可以有 30 条记录,其中包含 30 个不同的日期。
这是我的代码,但是当我将 [Date] 添加到选择中时,它会返回所有 30 条记录,而我试图返回带有最后日期的一条记录
Create PROCEDURE testPro(
@reportStartDate date,
@reportEndDate date
)
AS
BEGIN
SELECT DISTINCT Emp, Surname, CSD, CASE WHEN CSD<= @reportStartDate
THEN
CASE WHEN [Term Rsn] != 0 THEN
CASE WHEN [Date] <= @reportEndDate THEN
(DATEDIFF(dd,@reportStartDate, [Date]) - (2*
DATEDIFF(wk,@reportStartDate,[Date])))+1 ELSE (DATEDIFF(dd,@reportStartDate, @reportEndDate) - (2*
DATEDIFF(wk,@reportStartDate,@reportEndDate)))+1 END ELSE (DATEDIFF(dd,@reportStartDate, @reportEndDate) - (2*
DATEDIFF(wk,@reportStartDate,@reportEndDate)))+1 END
ELSE
CASE WHEN [Term Rsn] != 0 THEN
CASE WHEN [Date] <= @reportEndDate THEN
(DATEDIFF(dd,CSD, [Date]) - (2*
DATEDIFF(wk,CSD,[Date])))+1 ELSE (DATEDIFF(dd,CSD, @reportEndDate) - (2*
DATEDIFF(wk,CSD,@reportEndDate)))+1 END ELSE (DATEDIFF(dd,CSD, @reportEndDate) - (2*
DATEDIFF(wk,CSD,@reportEndDate)))+1 END
END AS [Working Days]
FROM GyPremiumsTemp
WHERE CSD < @reportEndDate AND [Date] > @reportStartDate --AND [Date] = (select max([Date]) FROM GyPremiumsTemp)
ORDER BY Emp ASC
END
EXEC testPro '2012-01-01', '2012-12-31'
【问题讨论】:
-
在子查询中添加 Where 条件(emp id)并尝试一下。
-
您是否考虑过规范化您的数据?
标签: sql sql-server