2017-05-03 5 views
0

아래와 같은 형식의 ColumnName에 고유 값이있는 동적 테이블이 있는데이 행을 열로 변환하는 방법을 모르겠습니다. 누구든지 도와 줄 수 있습니까?행을 열로 변환하는 방법

ColumnName  ColumnValue 
AccountNumber 123456 
AccountBalance 250 
AccountState TX 
AccountCity  Houston 

대상 국가는

AccountNumber AccountBalance AccountState AccountCity 
123456   250    TX    Houston 
+0

만 4 열 이름이 있습니까? –

+0

ColumnName 아래의 값은 구별되며 4 – AHS

+1

으로 제한되지 않습니다. 따라서 동적 테이블 또는 엔터티 특성 값 테이블이 빠지기 때문입니다. 그들은 첫 번째 정규 양식을 깨고 정말로 쿼리하기가 어렵습니다. –

답변

1

당신은 dynamic crosstab 사용할 수 있습니다

CREATE TABLE tbl(
    ColumnName VARCHAR(20), 
    ColumnValue VARCHAR(20) 
); 
INSERT INTO tbl VALUES 
('AccountNumber', '123456'), 
('AccountBalance', '250'), 
('AccountState', 'TX'), 
('AccountCity', 'Houston'); 

DECLARE @sql NVARCHAR(MAX) = N''; 

SELECT @sql = 
'SELECT' + CHAR(10); 

SELECT @sql = @sql + 
' MAX(CASE WHEN ColumnName = ' +QUOTENAME(ColumnName, '''') + ' THEN ColumnValue END) AS ' + QUOTENAME(ColumnName) + ',' + CHAR(10) 
FROM tbl; 
SELECT @sql = SUBSTRING(@sql, 0, LEN(@sql) - 1); 

SELECT @sql = @sql + CHAR(10) 
+ 'FROM tbl' 

PRINT @sql; 
EXEC(@sql); 

DROP TABLE tbl; 

ONLINE DEMO

+0

다른 열 ID의 특정 행을 선택하기위한 조건을 추가 할 수 있습니까? – AHS

+0

위의 솔루션 덕택에 조건을 추가 할 수있었습니다. – AHS

관련 문제