我有一個總結的日子一上市就一直活躍的子查詢。這些列表有3個不同的優先級,我們要分別進行分析。子查詢工作正常,但我必須重複自己3次,我不禁感到有人可以指向我更優雅的方向。Sql Server的子查詢環流式
我在尋找沿
Declare @Priorities text = ['H','M','L']
Foreach(priority in priorities)
(SELECT SUM(
CASE
WHEN(jlh_inner.StartDate IS NULL) THEN 0
WHEN(jlh_inner.EndDate IS NULL) THEN
DATEDIFF(dd, jlh_inner.StartDate, GETDATE())
ELSE
DATEDIFF(dd, jlh_inner.StartDate, jlh_inner.EndDate)
END)
FROM ListingHistory jlh_inner
WHERE jlh_inner.JobTitleId = jlh.JobTitleId
AND jlh_inner.OfficeCode = rof.code
AND jlh_inner.Priority = priority)
全部代碼線的東西現在的問題是:
BEGIN
SELECT rof.location AS location,
jlh.TitleId AS TitleId,
jt.Title AS Title,
(SELECT SUM(
CASE
WHEN(jlh_inner.StartDate IS NULL) THEN 0
WHEN(jlh_inner.EndDate IS NULL) THEN
DATEDIFF(dd, jlh_inner.StartDate, GETDATE())
ELSE
DATEDIFF(dd, jlh_inner.StartDate, jlh_inner.EndDate)
END)
FROM ListingHistory jlh_inner
WHERE jlh_inner.JobTitleId = jlh.JobTitleId
AND jlh_inner.OfficeCode = rof.code
AND jlh_inner.Priority = 'H') AS HighPriorityDays,
(SELECT SUM(
CASE
WHEN(jlh_inner.StartDate IS NULL) THEN 0
WHEN(jlh_inner.EndDate IS NULL) THEN
DATEDIFF(dd, jlh_inner.StartDate, GETDATE())
ELSE
DATEDIFF(dd, jlh_inner.StartDate, jlh_inner.EndDate)
END)
FROM ListingHistory jlh_inner
WHERE jlh_inner.JobTitleId = jlh.JobTitleId
AND jlh_inner.OfficeCode = rof.code
AND jlh_inner.Priority = 'M') AS MediumPriorityDays,
(SELECT SUM(
CASE
WHEN(jlh_inner.StartDate IS NULL) THEN 0
WHEN(jlh_inner.EndDate IS NULL) THEN
DATEDIFF(dd, jlh_inner.StartDate, GETDATE())
ELSE
DATEDIFF(dd, jlh_inner.StartDate, jlh_inner.EndDate)
END)
FROM ListingHistory jlh_inner
WHERE jlh_inner.JobTitleId = jlh.JobTitleId
AND jlh_inner.OfficeCode = rof.code
AND jlh_inner.Priority = 'L') AS LowPriorityDays
FROM Offices rof,
ListingHistory jlh,
JobTitle jt
WHERE rof.code = jlh.OfficeCode
AND jt.JobTitleID = jlh.JobTitleId
GROUP BY rof.location, rof.code, jlh.TitleId, jt.Title
ORDER BY location
END
感謝這@HLGEM它工作出色,非常易於閱讀。 SQL不是我的強項,Sql Server我是全新的。我不知道隱式連接是如此的破裂。我不會再使用它們了。 – ChrisOPeterson 2011-01-12 19:54:08