簡體   English   中英

使用行號對數據進行分區

[英]Using Row Number to Partition data

好的,這是我斷定我迷路的情況之一。

我有一個看起來像這樣的表:

在此處輸入圖片說明

我寫了以下代碼:

WITH CTE AS(
SELECT 
 USER_NBR
,CASE WHEN MOVIE_TYPE = 'Action'      THEN MOVIE_NAME END [ACTION]                        
,CASE WHEN MOVIE_TYPE = 'Drama'       THEN MOVIE_NAME END DRAMA
,CASE WHEN MOVIE_TYPE = 'Romance'     THEN MOVIE_NAME END ROMANCE
,ROW_NUMBER() OVER (PARTITION BY  USER_NBR ORDER BY  USER_NBR) AS OCCURANCE
FROM dbo.MOVIE)

SELECT * FROM CTE WHERE OCCURANCE = 1

我得到這個結果:

在此處輸入圖片說明

我不明白的是為什么查詢結果中會出現Nulls?

我究竟做錯了什么? 如您所見,我正在對電影進行分類。

感謝您簽出

也許這種方法對您有用。 通常,當您將行值轉換為列時(如示例中的影片類型),它是一個樞軸函數(請參閱http://msdn.microsoft.com/zh-cn/library/ms177410.aspx

select * from 
(select user_nbr, movie_name, movie_type from movies) as movies
pivot 
(max(movie_name)
    for movie_type in ([Action], [Drama], [Romance])
)
as PivotTable

結果:

user_nbr   Action             Drama           Romance
101        Casino Royale    Pretty Woman    Love Actually
102        Casino Royale    Pretty Woman    Love Actually

請注意,如果您嘗試獲取此類輸出,則必須使用group by子句..

如果您想獲取所有類別的價值,則可以嘗試以下查詢..

WITH CTE AS(
SELECT 
 USER_NBR
,CASE WHEN MOVIE_TYPE = 'Action'      THEN MOVIE_NAME END [ACTION]                        
,CASE WHEN MOVIE_TYPE = 'Drama'       THEN MOVIE_NAME END DRAMA
,CASE WHEN MOVIE_TYPE = 'Romance'     THEN MOVIE_NAME END ROMANCE
,count(*) AS OCCURANCE
FROM dbo.MOVIE
 group by USER_NBR
)
SELECT * FROM CTE 

我想這就是你想要做的..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM