2017-12-28 25 views
1

私は保険金請求表を持っています。それはIDを持っています、患者が持っている条件、ClaimID、EmergencyDepartmentFlag(1 - ED; 0 - NonED)条件ごとのクレーム数と条件ごとのED訪問の回数を与える結果を得る必要がありますSQL同じ条件で同じテーブルに参加してカウントを取得

+----------+-----------+----------+--------+ 
| MemberID | Condition | ClaimID | EDFlag | 
+----------+-----------+----------+--------+ 
| A123  | COPD  | 34124434 |  1 | 
| A526  | COPD  | 34580304 |  0 | 
| A693  | COPD  | 23723642 |  1 | 
| A645  | DM  | 46534633 |  1 | 
+----------+-----------+----------+--------+ 

の予想される出力

+-----------+-------------+----------+ 
| Condition | TotalClaims | EDClaims | 
+-----------+-------------+----------+ 
| COPD  |   3 |  2 | 
| DM  |   1 |  1 | 
+-----------+-------------+----------+ 

クエリ

SELECT condition, 
     Count(a1.claimid) AS TotalClaims, 
     Count(a2.claimid) AS EDClaims 
FROM (SELECT memberid, 
       condition, 
       claimid 
     FROM mytable) a1 
     INNER JOIN (SELECT memberid, 
          condition, 
          claimid 
        FROM mytable 
        WHERE edflag = 1) a2 
       ON a1.memberid = A2.memberid 
GROUP BY condition 

は、このクエリは、正しい結果を返しません。

+1

?私には 'COUNT'と' SUM'という単純な集計*のようです。 –

+0

@ PM77-1あなたは正しいです – shockwave

答えて

3

使おこの

SELECT 
    Condition, 
    TotalClaims = COUNT(1), 
    EDClaims = SUM(CAST(EDFlag AS INT)) 
    FROM YourTable 
    GROUP BY Condition 

デモ:あなたがすべてで `JOIN`が必要なのはなぜ

DECLARE @T TABLE 
(
    Condition VARCHAR(50), 
    ClaimID BIGINT, 
    EDFlag BIT 
) 

INSERT INTO @T 
VALUES('COPD',34124434,1), 
('COPD',34580304,0), 
('COPD',23723642,1), 
('DM',46534633,1) 

SELECT 
    Condition, 
    TotalClaims = COUNT(1), 
    EDClaims = SUM(CAST(EDFlag AS INT)) 
    FROM @T 
    GROUP BY Condition 

結果

enter image description here

+0

うわー!これはうまくいった – shockwave

+0

クレームIDのグレインである別の列がある場合はどうなりますか? I. ClaimIDは繰り返しています:例えば、ClaimAはClaimLine番号1、ClaimAはClaimLineNumber2です。したがって、これらは2つのレコードです。これを照会でどのように処理するか。 – shockwave

+0

次に、各行を別々に数えます。すなわち、 ClaimAにLine1とLine2がある場合、カウントは2になります –

1
SELECT 
Condition, 
COUNT(*) AS TotalClaims, 
SUM(CASE WHEN EDFlag = 1 THEN 1 ELSE 0 END) AS EDClaims 
FROM mytable 
GROUP BY Condition 
関連する問題