2014-02-18 3 views
0

기존 I 다음 쿼리가 :피벗에서 쿼리

select'Amount' as Amount, 
('£'+ CAST(SUM(rc.[Fee Charge] +rc.[Fee Charge VAT] +rc.ExtraCharges+rc.ExtraChargesVAT+rc.OtherCharges+rc.OtherChargesVAT+rc.WaitingCharge+rc.[WaitingCharge VAT])AS nvarchar(50))) AS [CompletedTurnover], 
('£'+ CAST(SUM(rin.[Fee Charge] +rin.[Fee Charge VAT] +rin.ExtraCharges+rin.ExtraChargesVAT+rin.OtherCharges+rin.OtherChargesVAT+rin.WaitingCharge+rin.[WaitingCharge VAT])AS nvarchar(50))) AS [In Progress Turnover], 
('£'+ CAST(SUM(run.[Fee Charge] +run.[Fee Charge VAT] +run.ExtraCharges+rc.ExtraChargesVAT+run.OtherCharges+run.OtherChargesVAT+run.WaitingCharge+run.[WaitingCharge VAT])AS nvarchar(50))) AS [Unallocated Turnover], 
123 as [Credit Note Value] 


from tblreservation R 
left join tblreservation rc on R.ReservationsID = rc.reservationsid and rc.Completed = 1 
left join tblreservation rin on R.reservationsid = rin.reservationsid and rin.InProgress = 1 
left join tblreservation run on Run.ReservationsID = r.ReservationsID and run.completed = 0 and run.inprogress = 0 

이 지금과 같은 데이터를 반환 :

CompletedTurnover  In progress Turnover  Unallocated Turnover  Credit Note Value  
1202039920    23998858945    9384585845     123 

이 예상 될 때를. 그러나 다음 출력이 필요하며 피벗을 사용하여 조금 고생하고 있습니다.

Completed Turnover 1202039920    
    In Progress Turnover 23998858945    
    Unallocated Turnover 9384585845     
    Credit Note Value  123 

모든 도움을 주시면 감사하겠습니다.

당신은 결과를 얻기 위해 노동 조합을 사용할 수 있습니다

답변

1

당신이 필요합니다

select 'Completed turnover' Description, 
     ( '£'+ CAST(SUM(rc.[Fee Charge] + 
        rc.[Fee Charge VAT] + 
        rc.ExtraCharges+ 
        rc.ExtraChargesVAT+ 
        rc.OtherCharges+ 
        rc.OtherChargesVAT+ 
        rc.WaitingCharge+ 
        rc.[WaitingCharge VAT] 
        )AS nvarchar(50))) value 
from .... 

union all 

select 'In Progress turnover', ..... 
from .... 

union all 

select 'Unallocated Turnover', ..... 
from .... 

은 아마 당신은이를 시도해보십시오 CTE

+0

건배 이안, 그것에 대해 갈 수있는 더 나은 방법을 보인다. 나는 할 수있을 때 받아 들일거야. –

0

와 함께 사용하여보고 싶을 ,,,,,

select'Amount' as Amount 
union all 
select 
('£'+ CAST(SUM(rc.[Fee Charge] +rc.[Fee Charge VAT] +rc.ExtraCharges+rc.ExtraChargesVAT+rc.OtherCharges+rc.OtherChargesVAT+rc.WaitingCharge+rc.[WaitingCharge VAT])AS nvarchar(50))) AS [CompletedTurnover] 
from tblreservation rc where Completed=1 
union all 

select 
('£'+ CAST(SUM(rin.[Fee Charge] +rin.[Fee Charge VAT] +rin.ExtraCharges+rin.ExtraChargesVAT+rin.OtherCharges+rin.OtherChargesVAT+rin.WaitingCharge+rin.[WaitingCharge VAT])AS nvarchar(50))) AS [In Progress Turnover] 
from tblreservation rin where InProgress=1 
union all 
select 
('£'+ CAST(SUM(run.[Fee Charge] +run.[Fee Charge VAT] +run.ExtraCharges+rc.ExtraChargesVAT+run.OtherCharges+run.OtherChargesVAT+run.WaitingCharge+run.[WaitingCharge VAT])AS nvarchar(50))) AS [Unallocated Turnover] 
from tblreservation run where InProgress=0 and Completed=0 
union all 
select 123 as [Credit Note Value] 
4

열을 행으로 변환하는이 프로세스는 실제로 UNPIVOT이라고합니다. 몇 가지 방법으로이 작업을 수행 할 수 있습니다.

UNPIVOT : 기능 :

;with cte as 
(
    select'Amount' as Amount, 
    ('£'+ CAST(SUM(rc.[Fee Charge] +rc.[Fee Charge VAT] +rc.ExtraCharges+rc.ExtraChargesVAT+rc.OtherCharges+rc.OtherChargesVAT+rc.WaitingCharge+rc.[WaitingCharge VAT])AS nvarchar(50))) AS [CompletedTurnover], 
    ('£'+ CAST(SUM(rin.[Fee Charge] +rin.[Fee Charge VAT] +rin.ExtraCharges+rin.ExtraChargesVAT+rin.OtherCharges+rin.OtherChargesVAT+rin.WaitingCharge+rin.[WaitingCharge VAT])AS nvarchar(50))) AS [In Progress Turnover], 
    ('£'+ CAST(SUM(run.[Fee Charge] +run.[Fee Charge VAT] +run.ExtraCharges+rc.ExtraChargesVAT+run.OtherCharges+run.OtherChargesVAT+run.WaitingCharge+run.[WaitingCharge VAT])AS nvarchar(50))) AS [Unallocated Turnover], 
    123 as [Credit Note Value] 
    from tblreservation R 
    left join tblreservation rc 
    on R.ReservationsID = rc.reservationsid 
    and rc.Completed = 1 
    left join tblreservation rin 
    on R.reservationsid = rin.reservationsid 
    and rin.InProgress = 1 
    left join tblreservation run 
    on Run.ReservationsID = r.ReservationsID 
    and run.completed = 0 
    and run.inprogress = 0 
) 
select col, value 
from cte 
unpivot 
(
    value 
    for col in (CompletedTurnover, [In Progress Turnover], 
       [Unallocated Turnover], [Credit Note Value]) 
) u; 

CROSS이 값을 적용 :

;with cte as 
(
    select'Amount' as Amount, 
    ('£'+ CAST(SUM(rc.[Fee Charge] +rc.[Fee Charge VAT] +rc.ExtraCharges+rc.ExtraChargesVAT+rc.OtherCharges+rc.OtherChargesVAT+rc.WaitingCharge+rc.[WaitingCharge VAT])AS nvarchar(50))) AS [CompletedTurnover], 
    ('£'+ CAST(SUM(rin.[Fee Charge] +rin.[Fee Charge VAT] +rin.ExtraCharges+rin.ExtraChargesVAT+rin.OtherCharges+rin.OtherChargesVAT+rin.WaitingCharge+rin.[WaitingCharge VAT])AS nvarchar(50))) AS [In Progress Turnover], 
    ('£'+ CAST(SUM(run.[Fee Charge] +run.[Fee Charge VAT] +run.ExtraCharges+rc.ExtraChargesVAT+run.OtherCharges+run.OtherChargesVAT+run.WaitingCharge+run.[WaitingCharge VAT])AS nvarchar(50))) AS [Unallocated Turnover], 
    123 as [Credit Note Value] 
    from tblreservation R 
    left join tblreservation rc 
    on R.ReservationsID = rc.reservationsid 
    and rc.Completed = 1 
    left join tblreservation rin 
    on R.reservationsid = rin.reservationsid 
    and rin.InProgress = 1 
    left join tblreservation run 
    on Run.ReservationsID = r.ReservationsID 
    and run.completed = 0 
    and run.inprogress = 0 
) 
select col, value 
from cte 
cross apply 
(
    values 
    ('CompletedTurnover', CompletedTurnover), 
    ('In Progress Turnover', [In Progress Turnover]), 
    ('Unallocated Turnover', [Unallocated Turnover]), 
    ('Credit Note Value', [Credit Note Value]) 
) c (col, value) 
0

당신은 아마 필요가 없습니다 집계 결과가 같은 테이블에서 온 이후로 합류했다. InProgressCompleted 항상 1 또는 0 경우, 다른 한편으로

SELECT 
    Caption, 
    Value 
FROM (
    SELECT 
    SUM(CASE WHEN Completed = 1 THEN 
     [Fee Charge] + [Fee Charge VAT] + ExtraCharges + ExtraChargesVAT + 
     OtherCharges + OtherChargesVAT + WaitingCharge + [WaitingCharge VAT] 
    END) AS [Completed Turnover], 
    SUM(CASE WHEN InProgress = 1 THEN 
     ... 
    END) AS [In-progress Turnover], 
    SUM(CASE WHEN Completed = 0 AND InProgress = 0 THEN 
     ... 
    END) AS [Unallocated Turnover], 
    123 AS [Credit Note Value] 
    FROM tblreservation 
) AS s 
UNPIVOT (
    Value FOR Caption IN (
    [Completed Turnover], [In-progress Turnover], 
    [Unallocated Turnover], [Credit Note Value] 
) 
) AS u 
; 

: 대신 @ bluefeet의 대답에 조건부 집계에게 방법 중 하나를 사용하여 결과 UNPIVOT

SELECT 
    SUM(CASE WHEN Completed = 1 THEN 
    [Fee Charge] + [Fee Charge VAT] + ExtraCharges + ExtraChargesVAT + 
    OtherCharges + OtherChargesVAT + WaitingCharge + [WaitingCharge VAT] 
    END) AS [Completed Turnover], 
    SUM(CASE WHEN InProgress = 1 THEN 
    ... 
    END) AS [In-progress Turnover], 
    SUM(CASE WHEN Completed = 0 AND InProgress = 0 THEN 
    ... 
    END) AS [Unallocated Turnover], 
    123 AS [Credit Note Value] 
FROM tblreservation 

다음을 사용할 수 있습니다 그리고 그들은, 그들이 모두 하나가 될 수 없다는 일관된 값이 그럴 수있어 그룹이 같은 결과 :

SELECT 
    Completed, 
    InProgress, 
    SUM(
    [Fee Charge] + [Fee Charge VAT] + ExtraCharges + ExtraChargesVAT + 
    OtherCharges + OtherChargesVAT + WaitingCharge + [WaitingCharge VAT] 
) AS Value 
FROM tblreservation 
GROUP BY 
    Completed, 
    InProgress 

다음을 단계는 CompletedInProgress의 조합을 적절한 캡션으로 바꾸는 것입니다. 한 가지 방법은 CASE 사용하는 것입니다

SELECT 
    CASE 
    WHEN Completed = 1 THEN 'Completed Turnover' 
    WHEN InProgress = 1 THEN 'In-progress Turnover' 
    ELSE      'Unallocated Turnover' 
    END AS Caption 
    SUM(
    [Fee Charge] + [Fee Charge VAT] + ExtraCharges + ExtraChargesVAT + 
    OtherCharges + OtherChargesVAT + WaitingCharge + [WaitingCharge VAT] 
) AS Value 
FROM tblreservation 
GROUP BY 
    Completed, 
    InProgress 

을 그리고 당신은 모든 UNION으로 일정 Credit Note Value를 추가 :

SELECT 
    CASE 
    WHEN Completed = 1 THEN 'Completed Turnover' 
    WHEN InProgress = 1 THEN 'In-progress Turnover' 
    ELSE      'Unallocated Turnover' 
    END AS Caption 
    SUM(
    [Fee Charge] + [Fee Charge VAT] + ExtraCharges + ExtraChargesVAT + 
    OtherCharges + OtherChargesVAT + WaitingCharge + [WaitingCharge VAT] 
) AS Value 
FROM tblreservation 
GROUP BY 
    Completed, 
    InProgress 

UNION ALL 

SELECT 
    'Credit Note Value', 
    123 
; 
관련 문제