是
SELECT t.column1,
(SELECT SUM(column3) FROM table1
WHERE column1 = t.column1 AND column2 = 2010) AS "2010",
(SELECT SUM(column3) FROM table1
WHERE column1 = t.column1 AND column2 = 2011) AS "2011",
(SELECT SUM(column3) FROM table1
WHERE column1 = t.column1 AND column2 = 2012) AS "2012"
FROM (
SELECT DISTINCT column1 FROM table1
) t
ORDER BY t.column1
注意,我已經添加了SUM()
聚合函數的情況下,各地colum3
你可以每column1, column2
有重複的值。
,取決於您所使用的數據庫,下面的等效查詢可能會更快一點:
SELECT t.column1,
(SELECT SUM(column3) FROM table1
WHERE column1 = t.column1 AND column2 = 2010) AS "2010",
(SELECT SUM(column3) FROM table1
WHERE column1 = t.column1 AND column2 = 2011) AS "2011",
(SELECT SUM(column3) FROM table1
WHERE column1 = t.column1 AND column2 = 2012) AS "2012"
FROM table1 t
GROUP BY t.column1
ORDER BY t.column1
請注意,您也可以達到同樣以更簡潔的方式,使用PIVOT
條款(如其他已建議)。在的Oracle 11g,這將轉化:
SELECT column1, "2010", "2011", "2012"
FROM table1
PIVOT (SUM(column3) FOR column2 IN (2010, 2011, 2012))
在任何情況下,我不知道,允許每個表表達式列的動態數量的任何數據庫,而不訴諸涉及XML或其它手段花樣的動態SQL。通常,這些技巧並不比我在這裏提出的要快得多。這意味着,你總能預見到,你要多少年,以支持爲列,並適應您的查詢相應
要回答主題中的問題:是的,SQL絕對有可能。 – JJJ 2012-08-08 08:27:45
你使用哪個數據庫? – Kayser 2012-08-08 08:33:42