プロが教えるわが家の防犯対策術!

SQL serverを使用しています。

列名に
 患者ID、入院日、薬剤投与日、単位数 
があります。
(患者IDは同じIDが複数あります:投与日が異なるため)

やりたいことは、
 1 1患者IDにつき1行に変換にした上で。
     患者ID、入院日、合計薬剤投与単位 
   に変換。
     ↑ここまではなんとかできました。

 2 上記に「入院日から3日以内の薬剤投与単位を追加」したいです。
   (「0」になるIDもあります)

入院日 + 2日 の変数を作成して、その範囲内に「薬剤投与日」が含まれている場合、単位数を合計する、、、みたいな感じなのかと思っているのですが、うまくいきません。

スクリプトは何回かに分けても構いませんので、やり方をご存知の方がいらっしゃいましたら、ご教授ください。
よろしくお願いします。

A 回答 (2件)

確実に患者ID毎の入院日がすべて同じにできているなら、次のSELECT文で大丈夫です。



SELECT
患者ID
,入院日
,SUM(単位数) AS 合計薬剤投与単位
,(SELECT
COALESCE(SUM(単位数),0)
FROM tbl
WHERE 患者ID=x.患者ID
AND DATEDIFF(DAY,入院日,薬剤投与日)<=2) AS "3日以内合計単位"
FROM tbl AS x
GROUP BY 患者ID,入院日
ORDER BY 患者ID
;
    • good
    • 0
この回答へのお礼

ありがとうございます。
時間がかかりましたが、なんとかできました。

お礼日時:2023/03/07 16:22

3日以内の投与がない場合は、SUM関数の結果はNULLとしたいですか?


それとも0としたいですか?

下記のSELECT文は、COALESCE関数で、0にしています。NULLにしたい場合は、COALESCE関数を外してSUM関数だけにしてください。

別名の先頭に半角または全角の数字(今回の場合は、3日〜)としましたが、この場合、必ず名前を"3日xxx"または[3日xxx]のように、「"」か[]で囲む必要があります。

SELECT
患者ID
,MIN(入院日) AS 入院日
,SUM(単位数) AS 合計薬剤投与単位
,(SELECT
COALESCE(SUM(単位数),0)
FROM tbl
WHERE 患者ID=x.患者ID
AND DATEDIFF(DAY,入院日,薬剤投与日)<=2) AS "3日以内合計単位"
FROM tbl AS x
GROUP BY 患者ID
ORDER BY 患者ID
;
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す