SELECT COALESCE(CurrMonth.Name, YTD.Name) AS Name, CurrMonth.Total AS Total, YTD.Total AS YearToDate
FROM (
SELECT Name, COUNT(Column1) AS Total
FROM Table1
WHERE Occurred_Date BETWEEN '2010-06-01' AND '2010-06-30' --Total
GROUP BY Name
) AS CurrMonth
FULL OUTER JOIN
(
SELECT Name, COUNT(Column1) AS Total
FROM Table1
WHERE Occurred_Date BETWEEN '2010-01-01' AND '2010-06-30' --YearToDate
GROUP BY Name
) AS YTD
ON CurrMonth.Name = YTD.Name
完全外部連接是沒有必要的,但只是演示瞭如何可能需要其中一組是不是其他的嚴格子集來辦案。我通常使用YTD子查詢LEFT JOIN到當前月份子查詢。
另一種策略 - 使用CASE:
SELECT Name
,COUNT(CASE WHEN Occurred_Date BETWEEN '2010-06-01' AND '2010-06-30' THEN Column1 ELSE NULL END) AS Total
,COUNT(CASE WHEN Occurred_Date BETWEEN '2010-01-01' AND '2010-06-30' THEN Column1 ELSE NULL END) AS YearToDate
FROM Table1
WHERE Occurred_Date BETWEEN '2010-06-01' AND '2010-06-30' -- (unnecessary)
OR Occurred_Date BETWEEN '2010-01-01' AND '2010-06-30'
GROUP BY Name
不確定在結果集中沒有發生衝突的情況下是否有可能。 – VoodooChild 2010-06-21 18:30:33