2017-10-30 3 views
1

내가 가진 테이블 tblTags (날짜, Tagindex, 값)SQL Server에서 열 값을 열로 설정하는 방법은 무엇입니까?

표의 값은 다음과 같습니다 제가 쓴이 들어

Date   0 1  2 
------------------------------- 
2017-10-21  21 212 23 
2017-10-21  34 52 65 

:로

Date   Tagindex Value 
--------------------------------- 
2017-10-21   0   21 
2017-10-21   1   212 
2017-10-21   2   23 
2017-10-21   0   34 
2017-10-21   1   52 
2017-10-21   2   65 

나는 결과를 원한다 다음 검색어 :

select * 
from 
    (SELECT a.Date, a.Tagindex,a.value 
    FROM tblTag a) as p 
pivot 
    (max(value) 
     for Tagindex in ([tblTag]) 
    ) as pvt 

하지만 이러한 오류가 발생합니다. S :

메시지 8114, 수준 16, 상태 1, 줄 10
오류 변환하는 데이터 형식 NVARCHAR int로.

메시지 레벨 473, 수준 1, 줄 10
"tblTag"값이 PIVOT 연산자에 제공됩니다.

이 문제를 해결하는 방법.

답변

1

나는이 같은 쿼리를 사용할 수 있다고 생각 :

;with t as (
    select * 
    , row_number() over (partition by [Date],[Tagindex] order by (select 0)) seq 
    from tblTag 
) 
select [Date], 
    max(case when [Tagindex] = 0 then [Value] end) '0', 
    max(case when [Tagindex] = 1 then [Value] end) '1', 
    max(case when [Tagindex] = 2 then [Value] end) '2' 
from t 
group by [Date], seq; 

SQL Server Fiddle Demo
SQL Server Fiddle Demo - with pivot

참고 : 나는 각 DateTagindex에 대한 일련 번호를 생성 할 row_number() 기능을 사용하여 위의 질의에서를, 그러나 트릭은 부분에 의해 순서대로 사용하는 임시 필드 인 (select 0)을 사용하고 있습니다. 삽입 된 행의 순서를 임의로 반환 할 수 없다고 믿을 수는 없습니다. 따라서 신뢰할 수있는 결과 세트를 얻으려면 필요합니다. datetime 또는 자동 증가 필드와 같은 추가 필드가 있어야합니다.

1

이 시도 :

DECLARE @tblTag TABLE 
(
    [Date] DATE 
    ,[TagIndex] TINYINT 
    ,[Value] INT 
); 

INSERT INTO @tblTag ([Date], [TagIndex], [Value]) 
VALUES ('2017-10-21', 0, 21) 
     ,('2017-10-21', 1, 212) 
     ,('2017-10-21', 2, 23) 
     ,('2017-10-22', 0, 34) 
     ,('2017-10-22', 1, 52) 
     ,('2017-10-22', 2, 65); 

SELECT * 
FROM @tblTag 
PIVOT 
(
    MAX([value]) FOR [Tagindex] IN ([0], [1], [2]) 
) PVT; 

당신은 정확히 which are the PIVOT columns 말을해야합니다. TagIndex에 대해 다른 값을 가지며 하드 코딩 할 수없는 경우 동적 PIVOT을 사용해야합니다.

또한 한 행에 tagIndex 값을 그룹화하는 방법이 있는지 확인해야합니다. 예를 들어, 다른 날짜 (내 테스트 데이터와 같음) 행이 삽입 될 때 마킹되는 ID 열 또는 그룹 ID 열 또는 날짜 추가 열.

관련 문제