SQL Server를 사용하고 있으므로 PIVOT 연산자를 사용하려고합니다. 정적 PIVOT 또는 동적 PIVOT을 통해이 두 가지 방법으로 수행 할 수 있습니다.
정적 PIVOT은 회전해야하는 각 열을 코딩한다는 것을 의미합니다. 당신이 많은 칼럼을 가지고있는 것처럼 보였기 때문에 나는 이런 식으로하고 싶지 않을 것입니다. 그러나 코드는 다음과 유사 할 것입니다 :
여기
create table t1
(
statno int,
statdate datetime,
statcolumnname varchar(50),
statcolumnvalue int
)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1MA.MP00-1MA', 17)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1MA.MP01-1MA', 18)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1MA.MP02-1MA', 18)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1MA.MP03-1MA', 18)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1ME.MP10-1ME', 26)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1ME.MP11-1ME', 2)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1ME.MP12-1ME', 2)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-2MC.MP08-2MC', 2)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-2MC.MP09-2MC', 22)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-2MC.MP0A-2MC', 22)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-2MC.MP0B-2MC', 22)
select *
from
(
select statdate, statcolumnname, statcolumnvalue
from t1
) x
pivot
(
min(statcolumnvalue)
for statcolumnname in ([MPB-1MA.MP00-1MA], [MPB-1MA.MP01-1MA], [MPB-1MA.MP02-1MA])
) p
가 작동 예와 SQL Fiddle입니다.
많은 열이 있다면 매우 귀찮습니다. 따라서 동적 피벗을 사용하면 쿼리 실행시 회전 할 열 목록을 생성 할 수 있습니다. 코드는 다음과 같습니다.
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.statcolumnname)
FROM t1 c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT statdate, ' + @cols + ' from
(
select statdate, statcolumnname, statcolumnvalue
from t1
) x
pivot
(
min(statcolumnvalue)
for statcolumnname in (' + @cols + ')
) p '
execute(@query)
두 가지 모두 동일한 결과를 제공합니다.
원하는 것은 흔히 PIVOT 쿼리라고하며, MySQL이 기본적으로 지원하지 않는 것입니다. 이 질문은 시작하는 데 도움이 될지 모르지만 그것은 추한 쿼리가됩니다. http://stackoverflow.com/questions/7888631/how-to-display-rows-as-columns-in-mysql – Andrew
@Andrew He doesn 어디서나 MYSQL을 언급하지 않습니다! – Bridge
나를 위해 더 많은 커피, 보스! 나는 할 수 있겠다. ... – Andrew