【发布时间】:2019-06-10 11:21:20
【问题描述】:
我很久以前就写过这个查询,它可以工作,但现在不行了。
CREATE PROCEDURE [dbo].[WeeklyReport]
AS
BEGIN
CREATE TABLE #temp
(
Area VARCHAR(20),
NoOfInspec INT
)
INSERT INTO #temp
SELECT DISTINCT
Area, COUNT(*) AS NoOfInsp
FROM
EngineeringData E, PIRTaskList T
WHERE
E.EnggDataID = t.EnggDataID
AND T.NextInspDate BETWEEN (DATEADD(DAY, 1 - DATEPART(WEEKDAY, GETDATE()), GETDATE()))
AND (DATEADD(DAY, 7 - DATEPART(WEEKDAY, GETDATE()), GETDATE()))
GROUP BY
Area
SELECT
t.Area, t.NoOfInspec AS Planned, SecTable.NoOfInsp AS Executed
FROM
#temp t
INNER JOIN
(SELECT DISTINCT
Area, COUNT(*) AS NoOfInsp
FROM
tblScheduleHistory
WHERE
EntryDate BETWEEN (DATEADD(DAY, 1 - DATEPART(WEEKDAY, GETDATE()), GETDATE()))
AND (DATEADD(DAY, 7 - DATEPART(WEEKDAY, GETDATE()), GETDATE()))
GROUP BY
Area) SecTable ON SecTable.Area = t.Area
ORDER BY
t.Area
END
针对几条记录的entrydate日期是
2019-10-06
2019-09-06
2019-11-06
如果有 1 个日期,则要求选择整周的记录。
【问题讨论】:
-
无需执行 SELECT DISTINCT,因为您的 GROUP BY 不会返回重复项。
-
今日提示:切换到现代、明确的
JOIN语法。更容易编写(没有错误),更容易阅读(和维护),如果需要更容易转换为外连接 -
@CodingManiac 。 . . “正在工作”和“不工作”非常模糊,不能提供有用的信息。
-
@jarlh:我删除了它但没有用
-
@iamdave 我不同意在编辑中向 OP 的代码添加显式连接。因此,它不能代表 OP 的实际 SQL。
标签: sql sql-server tsql sql-server-2012