2013-09-12 3 views
0

У меня есть набор результатов, который выглядит так. Я хотел бы суммировать оплаченную сумму и объединить DTV TOW и FlatBED в 1 строку. Есть ли способ, который я могу выполнить?Объединение 2 ряда

CaseServiceID PurchaseOrderID PaidAmount DTV TOW FLATBED 
227     15000227 19.20   1 0 
227     15000227 45.00   0 1 

примечание: DTV TOW и FLATBED столбцы из таблицы повернута

Редактировать

Pivot выглядит следующим образом:

select 
* 
from 
(
    select 
    cla.CaseServiceID 
    ,cla.ServiceTypeProgKey 
    ,cla.ClaimAmount 
    ,cla.PaidAmount 
    ,cla.ClaimQuantity 
    from 
    Claim cla 
) as srcServiceType 
pivot 
(
    max(ServiceTypeProgKey) for ServiceTypeProgKey in ([FLATBED],[DTV TOW] 
) as pvtServiceType 
+0

Можете ли вы показать свою сводную запрос? – SQLMason

+0

@DanAndrews, он обновлен. Thx –

ответ

2

Попробуйте это (при условии, PaidAmount и ClaimQuantity является битной TinyInt используются как логическое значение) еще изменений MAX просуммировать:

SELECT * 
FROM (
    SELECT cla.CaseServiceID, 
     cla.ServiceTypeProgKey, 
     SUM(cla.ClaimAmount) ClaimAmount, 
     MAX(cla.PaidAmount) PaidAmount, 
     MAX(cla.ClaimQuantity) ClaimQuantity 
    FROM Claim cla 
    GROUP BY cla.CaseServiceID, 
     cla.ServiceTypeProgKey 
    ) AS srcServiceType 
pivot(max(ServiceTypeProgKey) FOR ServiceTypeProgKey IN (
      [FLATBED], 
      [DTV TOW] 
      ) AS pvtServiceType) 
+1

FYI, [вы не можете агрегировать данные 'bit' напрямую] (http://sqlfiddle.com/#!3/d41d8/20649) –

+0

@AndriyM Спасибо за информацию, я всегда использую TinyInts вместо бит в любом случае (для индексирования), поэтому я пропускаю проблемы, когда их используют другие люди. – SQLMason

2

Как насчет

SELECT CaseServiceID, 
     PurchaseOrderID, 
     SUM(PaidAmount) PaidAmount, 
     SUM([DTV TOW]) [DTV TOW], 
     SUM(FLATBED) FLATBED 
FROM YourTable 
GROUP BY CaseServiceID, PurchaseOrderID 
-1

Что запрос в конечном счете выглядел. Я надеюсь, что это помогает кому-то. Благодаря

select 
,sum(isnull([FLATBED], 0)) AS [FLATBED] 
,sum(isnull([DTV TOW], 0)) AS [DTV TOW] 
from 
(
    select 
    cla.ServiceTypeProgKey, 
    ,sum(cla.PaidAmount) as 'PaidAmount' 
    ,sum(cla.ClaimQuantity) as 'ClaimQuantity' 
    ,sum(cla.PaidQuantity) as 'PaidQuantity' 
    from 
    Claim cla 
    inner join CaseService cse on cla.CaseServiceID = cse.CaseServiceID 
    group by cse.PurchaseOrderID 
) as srcServiceType 
pivot 
(
    count(ServiceTypeProgKey) FOR ServiceTypeProgKey IN ([FLATBED],[DTV TOW]) 
) as pvtServiceType 

... и результат

CaseServiceID PurchaseOrderID PaidAmount DTV TOW FLATBED 
227    15000227   64.20  1  1 
Смежные вопросы