SQL

2013-07-03 1 views
2

MS SQL 서버 2012SQL

으로 피벗을 사용하여 행에 약간의 열을 트랜스 나는 테이블 I는 다음과 같이 이러한 결과를 트랜스 싶습니다 indexrows

name displayname propertyvalue 
abc  $row1  agg 
abc  $row2  spx 
abc  $row3  qqq 
def  $row1  spx 
def  $row2  qqq 

라고했다.

name $row1 $row2 $row3 
abc  agg spx qqq 
def  spx qqq 

나는 성공적으로 다음 쿼리를 시도했다. 이 오류가 발생합니다.

메시지 156, 수준 15, 상태 1, 줄 10 키워드 'for'근처에 구문이 잘못되었습니다.

select * 
from (
select 
name,propertyvalue, displayname 
from indexrows 
) a 
PIVOT 
(
propertyvalue 
for [displayname] in ('$row1', '$row2', '$row3') 
) as pivot 

도움을 주시면 감사하겠습니다.

답변

4

쿼리에 몇 가지 문제가 있습니다.

먼저 PIVOT에 집계 함수가 누락되었습니다. propertyvalue 주위에 집계가 필요합니다.

두 번째로, $row1 등은 작은 따옴표가 아닌 대괄호로 묶어야합니다.

select * 
from 
(
    select name, propertyvalue, displayname 
    from indexrows 
) a 
pivot 
(
    max(propertyvalue) 
    for [displayname] in ([$row1], [$row2], [$row3]) 
) piv; 

당신이 할 수 있기 때문에 SQL Fiddle with Demo

2

선회는 집계 함수가 필요 참조 :

셋째, 나는 코드가 될 것입니다 결과로 as pivot

에 대해 다른 별명을 사용합니다 원본 테이블의 여러 항목 키당 하나의 값만있는 경우 MIN()을 사용하십시오.

또한, '$의 ROW1', '$의 ROW2', '$의 row3'지금 열 수 있습니다 및 열

같이 구분 될 필요가
select * 
from (
    select 
    name,propertyvalue, displayname 
    from indexrows 
) a 
PIVOT 
(
MIN(propertyvalue) 
for [displayname] in ([$row1], [$row2], [$row3]) 
) as pivot 
+0

곧 내가 쿼리 메시지 156, 수준 15 다음과 같은 오류를 얻을 , 상태 1, 줄 11 'pivot'키워드 근처의 구문이 잘못되었습니다. –

+0

원래 예제에서 세 번째 오류 인 'pivot'을 별칭으로 사용하지 않았습니다. 이것은 항상 오류를 던지는 것은 아니지만 항상 나쁜 생각입니다. – Anon