0

这是我的查询:

select year(p.datetimeentered) as Year, month(p.datetimeentered), datename(month, p.datetimeentered) as Month, st.type as SubType, sum(p.totalpaid) as TotalPaid from master m
inner join jm_subpoena s on s.number = m.number
inner join payhistory p on p.number = m.number
inner join jm_subpoenatypes st on st.id = s.typeid
where p.batchtype in ('PU','PUR','PA','PAR')
and p.datetimeentered > s.completeDate
group by year(p.datetimeentered), month(p.datetimeentered), datename(month, p.datetimeentered), st.type, p.batchtype
order by year(p.datetimeentered), month(p.datetimeentered), datename(month, p.datetimeentered), st.type, p.batchtype

这是该TotalPaid列的标准。

p.batchtype什么时候PU或者PA我需要对这些总数求和 什么时候p.batchtype或者PURPAR需要对这些总数求和然后我需要将这两个数字相减。

是否有捷径可寻?

4

3 回答 3

2

您可以将加法/减法作为求和的一部分:

SUM(CASE 
    WHEN p.batchtype IN ('PU','PA') THEN p.totalpaid 
    WHEN p.batchtype IN ('PUR','PAR') THEN -p.totalpaid 
    ELSE 0 
END) as TotalPaid
于 2013-11-14T21:31:38.100 回答
1

只需使用 case 语句:

Case when p.batch in ('PU','PA') then x + y
else when p.batch in ('PUR, PAR') then x-y
end as YourColumnNameHere

如果我最初的解释不正确,那么 pobrelkey 的建议就是:

sum (
when p.batch in ('PU','PA') then totalpaid
    else when p.batch in ('PUR, PAR') then -totalpaid)
end as YourColumnNameHere
于 2013-11-14T21:31:41.693 回答
0
SELECT Y, M, DATENM, SUBTYPE, (PU_PA_TotalPaid - PUR_PAR_TotalPaid) AS PUMINUSPUR, (PUR_PAR_TotalPaid - PU_PA_TotalPaid) AS PURMINUSPU
FROM
(select year(p.datetimeentered) as Y, month(p.datetimeentered) AS M, datename(month, p.datetimeentered) as DATENM, st.type as SubType, p.batchtype,
SUM(CASE WHEN p.batchtype IN ('PU', 'PA') THEN (p.totalpaid) ELSE 0 END) as PU_PA_TotalPaid ,
SUM(CASE WHEN p.batchtype IN ('PUR', 'PAR') THEN (p.totalpaid) ELSE 0 END) as PUR_PAR_TotalPaid 
from master m
inner join jm_subpoena s on s.number = m.number
inner join payhistory p on p.number = m.number
inner join jm_subpoenatypes st on st.id = s.typeid
where p.batchtype in ('PU','PUR','PA','PAR')
and p.datetimeentered > s.completeDate
group by year(p.datetimeentered), month(p.datetimeentered), datename(month, p.datetimeentered), st.type, p.batchtype
order by year(p.datetimeentered), month(p.datetimeentered), datename(month, p.datetimeentered), st.type, p.batchtype
) A
ORDER BY Y, M, DATENM, SUBTYPE,batchtype
于 2013-11-14T21:37:11.360 回答