0

さて、これは私が道に迷ったと結論付けた状況の1つです。

私はこのようなテーブルを持っています:

ここに画像の説明を入力してください

私は次のコードを書きました:

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

私はこの結果を得る:

ここに画像の説明を入力してください

私が理解していないのは、なぜクエリ結果にNullが表示されるのですか?

私は何が間違っているのですか?ご覧のとおり、私は映画を分類しています。

これをチェックしてくれてありがとう

4

2 に答える 2

3

たぶん、このアプローチはあなたのために働くでしょう。一般に、行の値を列に変換する場合 (例の映画の種類など)、これはピボット関数です (参照http://msdn.microsoft.com/en-us/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
于 2012-04-22T07:57:08.627 に答える
0

このタイプの出力を取得しようとしている場合は、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 

これがあなたがやろうとしていることだと思います..

于 2012-04-22T07:28:28.017 に答える