처럼 뭔가를 할 수 있지만, 내 예에 난 그냥 테스트를 만듭니다. @YourTableName 내에 테이블 이름을 설정해야합니다. 또한 결과를 한 행으로 제한하려면 @YourTableWhere를 설정해야합니다. 그렇지 않으면 여러 행이 혼합되어 출력이 이상하게 보입니다.
시도이 :
BEGIN TRY
CREATE TABLE YourTestTable
(RowID int primary key not null identity(1,1)
,col1 int null
,col2 varchar(30)
,col3 varchar(20)
,col4 money
,StatusValue char(1)
,xyz_123 int
)
INSERT INTO YourTestTable (col1,col2,col3,col4,StatusValue,xyz_123) VALUES (1234,'wow wee!','this is a long test!',1234.56,'A',98765)
INSERT INTO YourTestTable (col1,col2,col3,col4,StatusValue,xyz_123) VALUES (543,'oh no!','short test',0,'I',12)
END TRY BEGIN CATCH END CATCH
select * from YourTestTable
DECLARE @YourTableName varchar(1000)
DECLARE @YourTableWhere varchar(1000)
DECLARE @YourQuery varchar(max)
SET @YourTableName='YourTestTable'
set @YourTableWhere='y.RowID=1'
SELECT
@YourQuery = STUFF(
(SELECT
' UNION '
+ 'SELECT '''+COLUMN_NAME+''', CONVERT(varchar(max),'+COLUMN_NAME+') FROM '[email protected]+' y'+ISNULL(' WHERE '[email protected],'')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = @YourTableName
FOR XML PATH('')
), 1, 7, ''
)
PRINT @YourQuery
EXEC (@YourQuery)
출력 : SQL Server 2000의 호환성을 위해
RowID col1 col2 col3 col4 StatusValue xyz_123
----------- ----------- ------------------------------ -------------------- --------------------- ----------- -----------
1 1234 wow wee! this is a long test! 1234.56 A 98765
2 543 oh no! short test 0.00 I 12
SELECT 'RowID', CONVERT(varchar(max),RowID) FROM YourTestTable y WHERE y.RowID=1 UNION SELECT 'col1', CONVERT(varchar(max),col1) FROM YourTestTable y WHERE y.RowID=1 UNION SELECT 'col2', CONVERT(varchar(max),col2) FROM YourTestTable y WHERE y.RowID=1 UNION SELECT 'col3', CONVERT(varchar(max),col3) FROM YourTestTable y WHERE y.RowID=1 UNION SELECT 'col4', CONVERT(varchar(max),col4) FROM YourTestTable y WHERE y.RowID=1 UNION SELECT 'StatusValue', CONVERT(varchar(max),StatusValue) FROM YourTestTable y WHERE y.RowID=1 UNION SELECT 'xyz_123', CONVERT(varchar(max),xyz_123) FROM YourTestTable y WHERE y.RowID=1
----------- ------------------------
col1 1234
col2 wow wee!
col3 this is a long test!
col4 1234.56
RowID 1
StatusValue A
xyz_123 98765
편집
, 당신은 VARCHAR과 VARCHAR (최대)를 대체 할 수 있어야한다을 (8000) 위의 코드에서 SELECT @YourQuery
쿼리 대신 다음을 사용하십시오.
이 SQL 서버의 XML 기능을 사용하지 않기 때문에
SELECT
@YourQuery=ISNULL(@YourQuery+' UNION ','')
+ 'SELECT '''+COLUMN_NAME+''', CONVERT(varchar(max),'+COLUMN_NAME+') FROM '[email protected]+' y'+ISNULL(' WHERE '[email protected],'')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = @YourTableName
귀하의 질문에 실제 세부 사항이 없습니다 - 당신은 어떤 테이블을 다루고 있으며, 어떤 열 데이터 유형입니까? SQL Server 버전, pls. –
구체적으로 어떤 버전의 SQL Server입니까? 그리고 당신은 1 행의 데이터만을 가지고 계신 것입니까, 아니면 열 1이 열 이름이고 다른 모든 열은 해당 열의 데이터입니까? –
필자는 행을 열에 피벗시키고 행을 열로 피벗시키고 싶다는 것을 이해할 수 있습니까? 당신은 실제로 무엇을하려고합니까? –