1

#MyTable이라는 테이블이 있습니다.SQL 쿼리 - 피벗 그룹화 또는 내 결과 테이블을 가져 오는 개념

을 MyTable

ID Column Value 
    1 x1_abc 11 
    1 x1_def 23 
    1 x2_abc 9 
    1 x2_def 10 
    2 x1_abc 1 
    2 x1_def 55 
    2 x2_abc 42 
    2 x2_def 44 
    3 x1_abc 32 
    3 x1_def 33 
    3 x2_def 88 
    3 x2_def 90 

내 출력이

ID Column x1 x2 
    1 abc  11 9 
    1 def  23 10 
    2 abc  1 42 
    2 def  55 44 
    3 abc  32 88 
    3 def  33 90 

처럼이 SQL 쿼리이 가능하다 확실하지해야합니다. SQL Pivot을 사용해 보았지만 운동하지 못했습니다. 이 결과를 얻으려면 쿼리를 작성하라는 제안을하십시오.

+1

처럼 보인다. 너 정말 그걸로 붙어 있니? :-( – Strawberry

+0

예 @Strawberry –

+0

확실히 열악한 스키마.'Column'은'x1','x2' 값을위한 것과'abc','def' 값을위한 두 개의 별도의 열이어야합니다. –

답변

1

찾고있는 테이블을 만들기 위해 PIVOT을 수행 할 수있는 것처럼 보입니다. 아래를 참조하십시오.

SELECT ID, Column1, ISNULL([x1],0) AS 'x1', ISNULL([x2],0) AS 'x2' 
FROM 

(SELECT ID, RIGHT(Column1,3) AS Column1, LEFT(Column1,2) AS 'x', Value 
FROM #start) AS d 

PIVOT 
(SUM(Value) FOR x IN ([x1],[x2]) 
) AS piv 

테스트에 사용할 임시 테이블을 만들었습니다. 아래 임시 표를보십시오. 나는이 도움이됩니다 희망

ID Column1 x1 x2 
1 abc 11 9 
2 abc 1 42 
3 abc 32 0 
1 def 23 10 
2 def 55 44 
3 def 33 178 

: 여기

CREATE TABLE #start (ID int, Column1 nvarchar(50), Value int); 


INSERT INTO #start 
VALUES (1, 'x1_abc', 11), 
(1, 'x1_def', 23), 
(1, 'x2_abc', 9), 
(1, 'x2_def', 10), 
(2, 'x1_abc', 1), 
(2, 'x1_def', 55), 
(2, 'x2_abc', 42), 
(2, 'x2_def', 44), 
(3, 'x1_abc', 32), 
(3, 'x1_def', 33), 
(3, 'x2_def', 88), 
(3, 'x2_def', 90) 

내가 PIOVT를 사용하여받은 결과이다. 질문이 있으면 언제든지 연락하십시오.

1

동적 인 경우에 대비해야합니다.

Declare @SQL varchar(max) = ' 
Select * 
From (
     Select ID 
       ,[Column] = substring([column],charindex(''_'',[column])+1,50) 
       ,Item  = left([column],charindex(''_'',[column])-1) 
       ,Value 
     From YourTable 
    ) Src 
Pivot (max([Value]) For [Item] in (' + Stuff((Select Distinct ','+QuoteName(left([column],charindex('_',[column])-1)) 
               From YourTable 
               Order By 1 
               For XML Path('')),1,1,'') + ')) p 
Order By 1,2' 
Exec(@SQL); 

반환

ID Column x1 x2 
1 abc  11 9 
1 def  23 10 
2 abc  1 42 
2 def  55 44 
3 abc  32 88 
3 def  33 90 

생성 된 SQL이 끔찍한 데이터 모델이

Select * 
From (
     Select ID 
       ,[Column] = substring([column],charindex('_',[column])+1,50) 
       ,Item  = left([column],charindex('_',[column])-1) 
       ,Value 
     From YourTable 
    ) Src 
Pivot (max([Value]) For [Item] in ([x1],[x2])) p 
Order By 1,2