我有两个表声明和重新提交。 声明表中有一个重新提交(即)重新提交表属于声明表。
以下是我的表结构:
Claim:
ClaimPKID | Net | Gross | Date
1 | 2000 | 6000 | 2018-01-02
2 | 1000 | 1500 | 2018-02-13
3 | 1500 | 2100 | 2018-02-25
4 | 5000 | 6700 | 2018-02-22
-----------------------------
Resubmission:
ResubmissionPKID | ClaimID | Comment
1 | 2 | abc
2 | 3 | abc
3 | 2 | abc
4 | 3 | abc
我想要的是显示总和净金额的总和 详细信息首次提交或重新提交。
如果声明表ClaimPKID存储在重新提交中(这意味着如果声明已重新提交),那么我想单独对这些值进行分组。
例如
结果:
Net | Gross | Claim Type
-----------------------------------------------------------------
7000 (2000+5000) | 12700 (6000+6700) | First Submission
2500 (1000+1500) | 3600 (1500+2100) | Resubmission
所以我想根据声明中的 ClaimPKID 对值进行分组重新提交表。
我尝试了下面的代码,但它没有在单行中显示所有列的总值:
SELECT ROUND(coalesce(SUM(c.Gross), 0), 2) as gross,
ROUND(coalesce(SUM(c.Net), 0), 2) as net,
MAX(c.ClaimPKID)
FROM `Claim` as c
LEFT JOIN Resubmission r on r.ClaimID = c.ClaimPKID
WHERE c.Date BETWEEN '2018-01-01' AND '2018-02-28'
group by r.ClaimID
请帮帮我......
答案 0 :(得分:1)
您可以尝试使用UNION ALL
结合两种物种
SELECT SUM(Net) AS Net,SUM(Gross) AS Gross,'Resubmission' AS 'Claim Type'
FROM Claim T
INNER JOIN
(
SELECT ClaimID
FROM Resubmission
GROUP BY ClaimID
) T2 ON T.ClaimPKID = T2.ClaimID
WHERE T.Date BETWEEN '2018-01-01' AND '2018-02-28'
UNION ALL
SELECT SUM(Net) AS Net,SUM(Gross) AS Gross,'First Submission' AS 'Claim Type'
FROM Claim T
WHERE ClaimPKID NOT IN
(
SELECT ClaimID
FROM Resubmission
GROUP BY ClaimID
) AND T.Date BETWEEN '2018-01-01' AND '2018-02-28'
答案 1 :(得分:0)
你可以试试这个
DECLARE @t TABLE(ClaimPKID int, Net int, Gross int, [Date] datetime)
INSERT INTO @t VALUES(1 ,2000 ,6000, '2018-01-02')
INSERT INTO @t VALUES(2 ,1000 ,1500, '2018-02-13')
INSERT INTO @t VALUES(3 ,1500 ,2100, '2018-02-25')
INSERT INTO @t VALUES(4 ,5000 ,6700, '2018-02-22')
DECLARE @t2 TABLE(ResubmissionPKID int, ClaimID int, Comment varchar(50))
INSERT INTO @t2 VALUES(1 ,2 ,'abc')
INSERT INTO @t2 VALUES(2 ,3 ,'abc')
INSERT INTO @t2 VALUES(3 ,2 ,'abc')
INSERT INTO @t2 VALUES(4 ,3 ,'abc')
select SUM(NET), SUM(GROSS),(CASE WHEN (ClaimID IS NULL )THEN 'A' ELSE 'B' END) from @t A
left join @t2 B ON A.ClaimPKID = B.ClaimID
GROUP BY (CASE WHEN (ClaimID IS NULL )THEN 'A' ELSE 'B' END)