對於多個網站,我有一個包含數千行日誌統計信息(每頁,每個網站的視圖數)的單個表。例如,在該表中,多個站點可以有相同的頁面名稱的單獨統計:爲SQL Server中的表中的每個2 DISTINCT列選擇行
+----+---------+-------+------------+
| id | page | views | sitename |
+----+---------+-------+------------+
| 1 | page1 | 7 | name1 |
+----+---------+-------+------------+
| 2 | page1 | 5 | name2 |
+----+---------+-------+------------+
| 3 | page2 | 3 | name2 |
+----+---------+-------+------------+
| 4 | page1 | 7 | name3 |
+----+---------+-------+------------+
| 5 | page2 | 5 | name3 |
+----+---------+-------+------------+
| 6 | page3 | 3 | name3 |
+----+---------+-------+------------+
我試圖制定一個查詢,讓我列出每個不同的頁面名稱,爲每個不同的網址 - - 和顯示視圖每站點的頁面數:
+-------+----------+-------+---------+
| page | name1 | name2 | name3|
+-------+----------+-------+---------+
| page1 | 7 | 5 | 7 |
+-------+----------+-------+---------+
| page2 | NULL | 3 | 5 |
+-------+----------+-------+---------+
| page3 | NULL | NULL | 3 |
+-------+----------+-------+---------+
如果一個網站不具有對特定頁面一個統計,認爲值應爲NULL。這導致我認爲我需要在某個地方做一個JOIN/UNION,但是我無法圍繞它進行思考!當我需要多個不同的值時,如何制定此查詢?謝謝!
UPDATE(使用動態SQL + PIVOT ANSWER): PIVOT是正確的方法,其中兩個可能的答案包括在內。由於實際SELECT語句中的值的SUM是獲取動態SQL查詢正常工作的關鍵,因此向第二響應者提供了官方信用。
http://sqlfiddle.com/#!6/7b4cb/37/0
此外,使用了一些TSQL從這裏:
SQL Server Pivot with Dynamic Fields
這些sitenames是靜態列表嗎? –
似乎數據已經存在,這只是一個演示問題。如果我正在爲網頁做這件事,我會對你的表進行排序,並在服務器端Web代碼中進行演示。編輯:由@RohitSingh建議的數據透視表看起來像一個非常好的建議。 – mikeY
假設網站名稱列表各不相同,動態數據透視表可能會按順序排列:http://stackoverflow.com/questions/2209700/how-to-use-pivot-in-sql-server-2005-stored-procedure-joining -two-views –