[SQL] 어떻게 행으로 열을 선택하려면?
SQL어떻게 행으로 열을 선택하려면?
그래서, 주변 검색을 봤는데 나는 내 문제와 유사한 것을 발견했지만, 내가 진짜 해결책을 얻기 위해 더 많은 도움이 필요합니다.
나는 데이터의 2 열을 반환하는 쿼리를 생성하기 위해 노력하고있어, 첫 번째 열은 스스로 열 이름의 목록이어야하며, 두 번째는 해당 컬럼의 값이어야합니다.
시각적으로는 같을 것이다
Column1 Column2
------- -------
columnA value_of_columnA
columnB value_of_columnB
... ...
나는 꽤 확신이 달성하기 위해 동적 SQL을 요구하는 것이라는 것을 해요,하지만 난 쿼리 작성을 시작하는 방법을 모른다.
어떤 도움에 감사드립니다!
해결법
-
==============================
1.이것은 모든 테이블을 위해 작동해야하지만 내 예에 난 그냥 테스트를 만듭니다. 당신은 @YourTableName 내에서 테이블 이름을 설정해야합니다. 또한, 그렇지 않으면 출력이 함께 혼합 여러 행에 이상한 보이는, 한 행에 결과를 제한하는 @YourTableWhere를 설정해야합니다.
이것은 모든 테이블을 위해 작동해야하지만 내 예에 난 그냥 테스트를 만듭니다. 당신은 @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 '+@YourTableName+' y'+ISNULL(' WHERE '+@YourTableWhere,'') FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = @YourTableName FOR XML PATH('') ), 1, 7, '' ) PRINT @YourQuery EXEC (@YourQuery)
산출:
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
편집하다
SQL Server 2000의 호환성을 위해, 당신은 VARCHAR (8000)와 VARCHAR (최대)를 교체하고 위의 코드에서 SELECT @YourQuery 쿼리 대신이를 사용할 수 있어야합니다 :
SELECT @YourQuery=ISNULL(@YourQuery+' UNION ','') + 'SELECT '''+COLUMN_NAME+''', CONVERT(varchar(max),'+COLUMN_NAME+') FROM '+@YourTableName+' y'+ISNULL(' WHERE '+@YourTableWhere,'') FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = @YourTableName
-
==============================
2.
select column_name,* from information_schema.columns where table_name = 'TheTableName' order by ordinal_position
-
==============================
3.당신은 항상 이런 식으로 뭔가를 할 수
당신은 항상 이런 식으로 뭔가를 할 수
SELECT 'Column_Name' AS ColumnName, (SELECT TOP 1 Column_Name FROM Table tbl2 WHERE tbl.ID = tbl2.ID) FROM Table tbl
-
==============================
4.이 SQL 서버 2005의 XML 기능을 사용하지 않기 때문에이 질문에 대한 내 대답은 SQL Server 2000에보다 쉽게 작동합니다.
이 SQL 서버 2005의 XML 기능을 사용하지 않기 때문에이 질문에 대한 내 대답은 SQL Server 2000에보다 쉽게 작동합니다.
-
==============================
5.당신은 당신의 보고서와 당신이 그것을 생성하는 제시하는 방법에 대한 매우 명확하지 않다. 당신은 당신의 "보고서"를 생성하는 쿼리 도구에서 직접 결과를 사용하고 있습니까? 이 경우에, 당신은 파운드에 드라이버를 사용하여 못을하려고합니다 ...이라고 생각되다. 작업에 적합한 도구를 사용합니다.
당신은 당신의 보고서와 당신이 그것을 생성하는 제시하는 방법에 대한 매우 명확하지 않다. 당신은 당신의 "보고서"를 생성하는 쿼리 도구에서 직접 결과를 사용하고 있습니까? 이 경우에, 당신은 파운드에 드라이버를 사용하여 못을하려고합니다 ...이라고 생각되다. 작업에 적합한 도구를 사용합니다.
SQL 언어는 직접 보고서를 생성하는 설정으로 프리젠 테이션 데이터를 사용할 수 없습니다. 정말, 바보 같은 생각이다. 당신이 바로 업 SQL 문을 사용하여 보고서를 작성할 수 있다는 사실은 당신이해야한다는 것을 의미하지 않습니다.
당신은 정말 당신이 자신을 작성하는 것이 응용 프로그램, 또는 크리스탈 리포트와 같은 보고서 생성 도구를 사용하여 보고서를 생성해야한다.
응용 프로그램은 자신에 의해 작성 : 데이터베이스를 조회 할 수 커서 객체를 사용하는 경우, 당신은 단순히 커서 객체에서 열 이름을 얻을 수 있습니다. 문제 해결됨.
보고서 생성 도구 : 일반적으로 나타나는 수있는 동적 데이터를 표현하는 기능을 제공합니다.
어느 쪽이든, 당신이 당신의 접근 방식을 재고 할 필요가 있다고 생각합니다.
from https://stackoverflow.com/questions/1578500/how-to-select-columns-as-rows by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 빼기 정확히 년 (0) | 2020.07.13 |
---|---|
[SQL] 나는 여러 테이블에서 같은 열이 있고, 특정 값으로 모든 테이블에서 해당 열을 업데이트 할. 이걸 어떻게 할 수 있습니까? (0) | 2020.07.13 |
[SQL] 오라클은 외래 키를 얻을 수 (0) | 2020.07.13 |
[SQL] 어떻게 T-SQL을 사용하여 텍스트 파일을 읽을 수? (0) | 2020.07.13 |
[SQL] - MySQL의의 복잡성 : MyTable에 FROM SELECT COUNT (*); (0) | 2020.07.13 |