2015-02-04 2 views
0

결과 행을 열로 변환하려고하지만 비트 값만 변환하려고합니다. 내 뜻을 더 잘 설명하기 위해, 내 테이블은 이렇게 보입니다.SQL 행을 열 (비트 값만 피벗)

Id Item 
------------------- 
1  TextLineA 
1  TextLineB 
2  TextLineA 

그리고 내가 달성하고자하는 것은 이와 같은 레이아웃입니다.

Id TextLineA TextLineB 
-------------------------- 
1  True  True 
2  True  False 

불쌍한 형식에 사과드립니다. 그러나 내가 찾고있는 것을 전달합니다. 나는 Pivot을 시도했지만 합계가 아닌 참/거짓 값을 원하는만큼 합계 할 항목이 없습니다.

또한 약 15 개의 열이 있고 정적으로 쓰는 것도 괜찮습니다. 모든 포인터가 크게 감사하겠습니다!

+0

사용? 소스의 텍스트 열의 유무는? 나는 그 점에 대해 혼란스러워한다. –

+0

그들은 원래 테이블에 존재한다는 사실 만. 값이 열 머리글로 필요합니다. – creatiive

답변

3

접근 이런 종류의이 문제를 해결합니다 :

ID TextLineA TextLineB TextLineC 
1 1   1   0 
2 1   0   0 
3 1   1   1 
1에 해당하는

0이 거짓 : 이것은 결과

DECLARE @Example TABLE (Id int, Item varchar(20)) 

INSERT INTO @Example (ID, Item) 
SELECT 1, 'TextLineA' UNION ALL 
SELECT 1, 'TextLineB' UNION ALL 
SELECT 2, 'TextLineA' UNION ALL 
SELECT 3, 'TextLineA' UNION ALL 
SELECT 3, 'TextLineB' UNION ALL 
SELECT 3, 'TextLineC' 

select ID, 
    MAX(CASE WHEN Item='TextLineA' THEN 1 ELSE 0 END) as TextLineA, 
    MAX(CASE WHEN Item='TextLineB' THEN 1 ELSE 0 END) as TextLineB, 
    MAX(CASE WHEN Item='TextLineC' THEN 1 ELSE 0 END) as TextLineC 
FROM @Example 
GROUP BY ID 

.

0

사례 명세서를 사용해 보셨습니까?

SELECT 
    CASE MakeFlag 
     WHEN 1 THEN 'True' 
     WHEN 0 THEN 'False' 
    END 
FROM [AdventureWorks2012].[Production].[Product] 
1

무엇 결과에 참 또는 거짓의 원인 Pivot

SELECT id, 
     CASE WHEN [TextLineA] IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END [TextLineA], 
     CASE WHEN [TextLineB] IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END [TextLineB] 
FROM Yourtable 
     PIVOT (Max(Item) 
      FOR item IN ([TextLineA],[TextLineB])) piv