基于连接表中存在的值进行分组

时间:2018-03-16 12:22:34

标签: mysql sql

我有两个表声明和重新提交。 声明表中有一个重新提交(即)重新提交表属于声明表。

以下是我的表结构:

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

请帮帮我......

2 个答案:

答案 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'

SQLFiddle

答案 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)