有人可以解释为什么下面的两个 select 语句结果不同!我知道第一个语句是正确的(使用 CASE),但我不明白为什么第二个语句是错误的。
CREATE TABLE #sales
(
YearSold int,
Quarter char(2),
Amount money
)
GO
INSERT INTO #sales (YearSold, Quarter, Amount) values (2003, 'Q1', 1)
INSERT INTO #sales (YearSold, Quarter, Amount) values (2003, 'Q2', 2)
INSERT INTO #sales (YearSold, Quarter, Amount) values (2003, 'Q3', 3)
INSERT INTO #sales (YearSold, Quarter, Amount) values (2003, 'Q4', 4)
INSERT INTO #sales (YearSold, Quarter, Amount) values (2004, 'Q1', 5)
INSERT INTO #sales (YearSold, Quarter, Amount) values (2004, 'Q2', 6)
INSERT INTO #sales (YearSold, Quarter, Amount) values (2004, 'Q3', 7)
INSERT INTO #sales (YearSold, Quarter, Amount) values (2004, 'Q4', 8)
INSERT INTO #sales (YearSold, Quarter, Amount) values (2005, 'Q1', 9)
INSERT INTO #sales (YearSold, Quarter, Amount) values (2005, 'Q2', 10)
INSERT INTO #sales (YearSold, Quarter, Amount) values (2005, 'Q3', 0)
INSERT INTO #sales (YearSold, Quarter, Amount) values (2005, 'Q4', 0)
GO
SELECT YearSold,
SUM(CASE Quarter WHEN 'Q1' THEN Amount ELSE 0 END) AS Q1,
SUM(CASE Quarter WHEN 'Q2' THEN Amount ELSE 0 END) AS Q2,
SUM(CASE Quarter WHEN 'Q3' THEN Amount ELSE 0 END) AS Q3,
SUM(CASE Quarter WHEN 'Q4' THEN Amount ELSE 0 END) AS Q4
FROM #sales
GROUP BY YearSold
SELECT t.YearSold, SUM(a.Amount) AS Q1, SUM(b.Amount) AS Q2, SUM(c.Amount) AS Q3, SUM(d.Amount) AS Q4
FROM #sales t
LEFT JOIN #sales a ON t.YearSold = a.YearSold AND a.Quarter='Q1'
LEFT JOIN (select * from #sales where Quarter='Q2') b ON t.YearSold = b.YearSold
LEFT JOIN (select * from #sales where Quarter='Q3') c ON t.YearSold = c.YearSold
LEFT JOIN (select * from #sales where Quarter='Q4') d ON t.YearSold = d.YearSold
GROUP BY t.YearSold
--select * from #sales
DROP TABLE #sales
注意:使用 SQL Server 2008 Express