[SQL] 동적 열 플러스 컬럼 이름 UNPIVOT
SQL동적 열 플러스 컬럼 이름 UNPIVOT
나는 형식의 열 많은 수의 테이블을 피벗 해제하기 위해 노력하고있어 :
PID UID col1 col2 col3...
동적의 SQL은 다음과 컬럼의 이름을 제외한 거의 모든 날을 얻을 것이다. 목표는 UNPIVOT 값이 시작된 컬럼의 이름으로 "ID"필드에 기입한다.
-- Build list of cols we want to unpivot (skip PID & UID)
declare @cols nvarchar(max)
select @cols = coalesce(@cols+N',', N'') + quotename(c.name) from syscolumns c
inner join sysobjects o on c.id = o.id and o.xtype = 'u'
where o.name = 'MyTable' and c.name not in ('PID', 'UID') order by c.colid
declare @query nvarchar(max)
select @query = N'
select PID, [UID], ID, Val
from
(
select PID, UID, ''ID'' as ID, ' + @cols + '
from MyTable
where UID <> 0
) as cp
unpivot
(
Val for Vals in (' + @cols + ')
) as up
'
exec sp_executesql @query
나는 어쩌면 내가 SYSCOLUMNS & MyTable에 함께 참여 일종의을하고 다음 두 번째 UNPIVOT을 할 수 있다고 생각하지만 난 그것을 알아낼 수 없었다.
궁극적으로 내 쿼리가 반환해야
PID UID ID Val
123 456 'col1 name' 'xyz'
123 456 'col2 name' 'def'
123 333 'col1 name' 'fdf'
...
나는 UNPIVOT을위한 동적 SQL을 생성하기 위해 컬럼의 이름을 얻는 방법을 알고 동안 그래서, 나는 UNPIVOT의 출력에 열 이름을 결합하는 방법을 모르겠어요.
해결법
-
==============================
1.당신은 UNPIVOT의 일부 COL의 발에서 열 이름을 참조 할 수 있습니다. 골은 열 이름을 가져옵니다
당신은 UNPIVOT의 일부 COL의 발에서 열 이름을 참조 할 수 있습니다. 골은 열 이름을 가져옵니다
예 바이올린
-- Build list of cols we want to unpivot (skip PID & UID) declare @cols nvarchar(max) select @cols = coalesce(@cols+N',', N'') + quotename(c.name) from syscolumns c inner join sysobjects o on c.id = o.id and o.xtype = 'u' where o.name = 'MyTable' and c.name not in ('PID', 'UID') order by c.colid declare @query nvarchar(max) select @query = N' select PID, [UID], Col as ID, Val from ( select PID, UID, ' + @cols + ' from MyTable where UID <> 0 ) as cp unpivot ( Val for Col in (' + @cols + ') ) as up ' exec sp_executesql @query
from https://stackoverflow.com/questions/18775409/unpivot-with-dynamic-columns-plus-column-names by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 빈 SQL 테이블 퍼키이 있습니까? 모든 SQL 테이블합니까? (0) | 2020.05.16 |
---|---|
[SQL] SELECT 목록에서 별칭 다른 곳에서 참조 (0) | 2020.05.16 |
[SQL] XMLNS와 OPENXML : DT (0) | 2020.05.16 |
[SQL] SQL에서 처음 2 특수 문자 사이의 문자를 가져옵니다 (0) | 2020.05.16 |
[SQL] 오라클에서 피벗 테이블을 사용하여 조언 (0) | 2020.05.16 |