0

好的,这是我断定我迷路的情况之一。

我有一个看起来像这样的表:

在此处输入图像描述

我写了以下代码:

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

我得到这个结果:

在此处输入图像描述

我不明白为什么我在查询结果中得到空值?

我究竟做错了什么?如您所见,我正在对电影进行分类。

感谢您检查这个

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 回答