[SQL] 어떻게 SQL 서버의 텍스트 열을 피벗?
SQL어떻게 SQL 서버의 텍스트 열을 피벗?
내 데이터베이스에이 같은 테이블이 (SQL 서버 2008)
ID Type Desc
--------------------------------
C-0 Assets No damage
C-0 Environment No impact
C-0 People No injury or health effect
C-0 Reputation No impact
C-1 Assets Slight damage
C-1 Environment Slight environmental damage
C-1 People First Aid Case (FAC)
C-1 Reputation Slight impact; Compaints from local community
난 열과 자산, 사람, 환경, 평판 표시하고, 값으로 소계 유사한 표시하도록. 내가 피벗 쿼리를 실행할 때, 내 모든 값은 null입니다.
내 질문에 캔 누군가의 모양과 내가 잘못하고있는 중이 야 어디 있는지 말해?
Select severity_id,pt.[1] As People, [2] as Assets , [3] as Env, [4] as Rep
FROM
(
select * from COMM.Consequence
) As Temp
PIVOT
(
max([DESCRIPTION])
FOR [TYPE] In([1], [2], [3], [4])
) As pt
여기 내 출력은
ID People Assets Env Rep
-----------------------------------
C-0 NULL NULL NULL NULL
C-1 NULL NULL NULL NULL
C-2 NULL NULL NULL NULL
C-3 NULL NULL NULL NULL
C-4 NULL NULL NULL NULL
C-5 NULL NULL NULL NULL
해결법
-
==============================
1.
Select severity_id, pt.People, Assets, Environment, Reputation FROM ( select * from COMM.Consequence ) As Temp PIVOT ( max([DESCRIPTION]) FOR [TYPE] In([People], [Assets], [Environment], [Reputation]) ) As pt
-
==============================
2.나는 SQL 서버에서이 문제를 재현하고 그것을 잘 작동합니다.
나는 SQL 서버에서이 문제를 재현하고 그것을 잘 작동합니다.
나는 한 내용이 TYPE 및 설명 컬럼에있을 것입니다 알고하지 않은 경우 작업이 변환 할 노력하고있어.
또한 가이드로 이것을 사용하고 있었다. (SQL Server의 '피봇'를 사용하여 열을 행으로 변환)
편집하다 ----
다음은 두 필드의 내용을 모르는 경우 위의 내 솔루션은 ....입니다
-- setup commands drop table #mytemp go create table #mytemp ( id varchar(10), Metal_01 varchar(30), Metal_02 varchar(100) ) -- insert the data insert into #mytemp select 'C-0','Metal One','Metal_One' union all select 'C-0','Metal & Two','Metal_Two' union all select 'C-1','Metal One','Metal_One' union all select 'C-1','Metal (Four)','Metal_Four' union all select 'C-2','Metal (Four)','Metal_Four' union all select 'C-2','Metal / Six','Metal_Six' union all select 'C-3','Metal Seven','Metal_Seven' union all select 'C-3','Metal Eight','Metal_Eight' -- prepare the data for rotating: drop table #mytemp_ReadyForRotate select *, replace( replace( replace( replace( replace( mt.Metal_01,space(1),'_' ) ,'(','_' ) ,')','_' ) ,'/','_' ) ,'&','_' ) as Metal_No_Spaces into #mytemp_ReadyForRotate from #mytemp mt select 'This is the content of "#mytemp_ReadyForRotate"' as mynote, * from #mytemp_ReadyForRotate -- this is for when you KNOW the content: -- in this query I am able to put the content that has the punctuation in the cell under the appropriate column header Select id, pt.Metal_One, Metal_Two, Metal_Four, Metal_Six, Metal_Seven,Metal_Eight FROM ( select * from #mytemp ) As Temp PIVOT ( max(Metal_01) FOR Metal_02 In( Metal_One, Metal_Two, Metal_Four, Metal_Six, Metal_Seven, Metal_Eight ) ) As pt -- this is for when you DON'T KNOW the content: -- in this query I am UNABLE to put the content that has the punctuation in the cell under the appropriate column header -- unknown as to why it gives me so much grief - just can't get it to work like the above -- it WORKS just fine but not with the punctuation field drop table ##csr_Metals_Rotated go DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX), @InsertIntoTempTable as nvarchar(4000) select @cols = STUFF((SELECT ',' + QUOTENAME(Metal_No_Spaces) from #mytemp_ReadyForRotate group by Metal_No_Spaces order by Metal_No_Spaces FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT id,' + @cols + ' into ##csr_Metals_Rotated from ( select id as id, Metal_No_Spaces from #mytemp_ReadyForRotate ) x pivot ( max(Metal_No_Spaces) for Metal_No_Spaces in (' + @cols + ') ) p ' execute(@query); select * from ##csr_Metals_Rotated
from https://stackoverflow.com/questions/10025934/how-to-pivot-text-columns-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 우리는 SQL을 사용하여 MS 액세스 데이터베이스의 모든 테이블을 나열 할 수 있습니다? (0) | 2020.05.14 |
---|---|
[SQL] SQL의 최상위 부모를 찾기 (0) | 2020.05.14 |
[SQL] 밑줄 MySQL의 LIKE 쿼리 (0) | 2020.05.14 |
[SQL] SQL 서버 : 타임 스탬프 열에 명시 적 값을 삽입 할 수 없습니다 (0) | 2020.05.14 |
[SQL] SQL 오류 "ORA-01722 : 잘못된 번호" (0) | 2020.05.14 |