2014-09-04 3 views
0

내가 가입중인 테이블 중 하나에 각 고유 ID에 대해 여러 행을 포함 할 수있는 쿼리를 작성하려고합니다. 결과에 이러한 행을 결합하여 각 고유 ID에 행이 하나만 있도록하고 싶습니다.여러 행을 별도의 열이있는 하나의 행에 결합

Tender 테이블 :

ID  | TenderType | TenderAmount 
---------------------------------------- 
4567 | Cash   | 40.00 
4568 | Cash   | 22.00 
4568 | Visa   | 86.00 
4568 | Gift Card  | 10.00 
4570 | Cash   | 66.00 
4570 | MC   | 30.00 

원하는 결과 : 나는 SQL 서버 2005을 사용하고

ID | TenderType1 | TenderType2 | TenderType3 | TenderAmount1 | TenderAmount2 | TenderAmount3 | 
------------------------------------------------------------------------------------------------ 
4567 | Cash  |    |    | 40.00   |    |    | 
4568 | Cash  | Visa  | Gift Card | 22.00   | 86.00   | 10.00   | 
4570 | Cash  | MC   |    | 66.00   | 30.00   |    | 

어떤 도움 놀라운 것

아래의 간단한 예제를 참조하십시오.

+0

난 그냥이 구절을 좋아합니다. ID는 반복되는 경우 고유하지 않습니다. (나는 당신이 의미하는 것을 알고있다.) –

+0

하! 나는 그것이 잘못 읽힐 수 있음을 안다. 원래 테이블에서 값은 고유하지 않지만 쿼리에서 (잘하면) 나타납니다. –

답변

0

이것은 '피벗'입니다. 피벗 테이블을 수행하는 방법을 찾아야합니다.

0
;WITH CashCTE AS 
(
    SELECT ID, 
      TenderType, 
      TenderAmount 
    FROM Tender 
    WHERE TenderType = 'Cash' 
),GiftCardCTE AS 
(
    SELECT ID, 
      TenderType, 
      TenderAmount 
    FROM Tender 
    WHERE TenderType = 'Gift Card' 
),CreditCardCTE AS 
(
    SELECT ID, 
      TenderType, 
      TenderAmount 
    FROM Tender 
    WHERE TenderType IN ('Visa','MC') 
) 

SELECT COALESCE(C.ID,G.ID,V.ID) AS ID, 
     C.TenderType AS TenderType1, 
     V.TenderType AS TenderType2, 
     G.TenderType AS TenderType3, 
     C.TenderAmount AS TenderAmount1, 
     V.TenderAmount AS TenderAmount2, 
     G.TenderAmount AS TenderAmount3 
FROM CashCTE C 
     FULL OUTER JOIN GiftCardCTE G 
      ON C.ID = G.ID 
     FULL OUTER JOIN CreditCardCTE V 
      ON C.ID = V.ID 

SQL Fiddle Demo

관련 문제