我有一張表,其中包含用戶的互聯網歷史記錄。該表格的結構包含該頁面的User_ID,Page Accepted和Date Accepted。例如:通過頁面列表選擇最熱門用戶
+==========================================+
|User_ID | Page_Accessed | Date_Accessed |
+==========================================+
|Johh.Doe | Google | 1/1/2015 |
|Johh.Doe | Google | 1/1/2015 |
|Suzy.Lue | Google | 7/11/2015 |
|Suzy.Lue | Wikipedia | 4/23/2015 |
|Babe Ruth| StackOverflow | 9/1/2015 |
+==========================================+
我目前正在使用一個使用SQL查詢:
RANK() OVER (PARTITION BY [Page Accessed] ORDER BY Count(DateAcc))
然後,我通過各個站點使用PIVOT()。從PIVOT()和GROUP BY [等級]選擇記錄WHERE (Num = 1)
後不過,我結束了,導致類似的查詢:
+=================================================+
|Rank | Google | Wikipedia | StackOverflow |
+=================================================+
| 1 | John Doe| NULL | NULL |
| 1 | NULL | Suzy Lue | NULL |
| 1 | NULL | NULL | Babe Ruth |
+=================================================+
相反,我需要重新格式化我的輸出:
+=================================================+
|Rank | Google | Wikipedia | StackOverflow |
+=================================================+
| 1 | John Doe| Suzy Lue | Babe Ruth |
+=================================================+
我當前的查詢:
SELECT Rank, Google, Wikipedia, StackOverflow
FROM(
SELECT TOP (100) PERCENT User_ID, Page_Accessed, COUNT(Date_Accessed) AS Views,
RANK() OVER (PARTITION BY Page_Accessed ORDER BY Count(Date_Accessed) DESC) AS Rank
FROM Record_Table
GROUP BY dbo.location_key.subSite, dbo.user_info_list_parse.Name
ORDER BY Views DESC) AS tb
PIVOT (
max(tb.User_ID) FOR
Page_Accessed IN (Google, Wikipedia, StackOverflow)
) pvt
WHERE (Num = 1)
是否有任何創造性的解決方案來獲得這樣的結果?
提供您的完整查詢。 – Nicarus
不那麼有創意,但是....只需在每個字段中添加一個max(),除了rank和group by等級。 '...最大(谷歌)作爲谷歌,最大(維基百科)作爲維基百科,最大(Stackoverflow)作爲StackOverflow ....分組排名# – xQbert
我不明白你爲什麼使用'Date_Accessed'作爲聚合字段參數爲'PIVOT' - 這就是爲什麼你的穀物「關閉」 – Nicarus