2012-04-22 5 views
0

좋습니다. 이것은 내가 잃어 버렸다고 결론을 내린 상황 중 하나입니다.로우 번호를 파티션 데이터로 사용

enter image description here

:이 결과를 얻을

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 

: 나는 다음과 같은 코드를 작성했습니다

enter image description here

:

내가 이렇게 보이는 테이블이 내가 이해하지 못하는 것은 wh이다. 쿼리 결과에 Null이 표시됩니까?

내가 뭘 잘못하고 있니? 보시다시피 영화를 분류하고 있습니다.

+1

어떤 가치 것은 당신이에 기대 'NULL' 값의 컬럼? –

+0

예쁜 여자와 사랑 사실. 그 범주에 속한 두 편의 영화. 감사! – Asynchronous

+0

그래서 첫 번째 줄을'user_nbr'에 의해 각 형식의'movie'를 쿼리에 명시 적으로 정의한 것은 아니지만 "첫 번째"를 표시하려고합니까? –

답변

3

수행하려고 어쩌면이 방법은 당신을 위해 작동 무슨 생각 .. 쿼리를 다음 시도 할 수 있습니다. 당신이 (당신의 예제에서 영화 유형 등) 열에 행 값을 회전 할 때 일반적으로, 피벗 기능 (REF 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 
+0

이것도 완벽하게 작동합니다. 실제 Action, Drama 및 Romance 열이있는 새 테이블에 어떻게 삽입합니까? – Asynchronous

+0

@UnaverageGuy, 다음과 같이 할 수 있습니다 : INSERT INTO new_table (user_nbr, action, drama, romance) SELECT * FROM (...) – McGarnagle

+0

팁 주셔서 감사합니다 !! – Asynchronous

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 

나는 이것이 당신이 ...

+0

표시된 코드는 단일 행이 아닌 모든 데이터를 보여 주며 내가 의도 한 것이 아니라 감사합니다! – Asynchronous

+0

해결되었습니다! 내가해야 할 일은 CTE 블록의 각 CASE에 GROUP BY USER_NBR을 추가하는 것이었다. 더 이상의 Nulls !! 모두에게 감사드립니다! – Asynchronous