SQL Server 2008 R2を使用しています。SQL:日付のレコードが存在しない場合でも、連続するレコードの数。
私は、病院のアポイントメントスロットのテーブルを照会していて、特定の医者のアポイントメントスロットの数が、予約されているとフラグされ、週番号/年ごとにグループ化されたリストを返そうとしています。
まだ予約されている予定がない場合もありますが、予約された予定スロットの数がゼロの場合でも、今後のすべての週を一覧表示する必要があります。私は、標準の結果を集約する選択していることを理解し
-------------------------------------------
Year | Week Number | Number of Booked Slots
-------------------------------------------
2017 | 48 | 10
2017 | 49 | 0
2017 | 50 | 4
2017 | 51 | 2
2017 | 52 | 0
2018 | 1 | 5
に何もないので、レコードのゼロカウントがありますそれらの週が表示されません。
私が探している出力は、これらの線に沿っています私はこれを回避しようとしましたが、最初にすべての今後の週のリストを作成しました。私は、私はゼロ週を表示するクエリを得ることができない可能性があるとして
しかし、私はこれに類似した問題の解決策の数を見て、しかし、実験Iの避難所」にもかかわらずき
...してみてください(SQL Count to include zero valuesを含む)
私がこれまでに書いた質問の最新の反復です。
WITH CTE_Dates AS
(
SELECT DISTINCT Slot_Start_Date AS cte_date
FROM [Outpatients.vw_OP_Clinic_Slots WITH (NOLOCK)
)
SELECT
DATEPART(year,OPCS.Slot_Start_Date) [Year]
,DATEPART(week,OPCS.Slot_Start_Date) [Week Number]
,count(OPCS.Slot_Start_Date) [Number of Booked Slots]
FROM
Outpatients.vw_OP_Clinic_Slots OPCS WITH (NOLOCK)
LEFT OUTER JOIN CTE_Dates ON OPCS.Slot_Start_Date=CTE_Dates.cte_date
LEFT OUTER JOIN Outpatients.vw_OP_Clinics CLIN ON OPCS.Clinic_Code=CLIN.Clinic_Code
WHERE
OPCS.Slot_Start_Date >= '14/08/2017'
AND OPCS.Booked_Flag = 'Y'
AND CLIN.Lead_Healthcare_Professional_Name = 'Dr X'
GROUP BY
DATEPART(year,OPCS.Slot_Start_Date)
,DATEPART(week,OPCS.Slot_Start_Date)
ORDER BY
DATEPART(year,OPCS.Slot_Start_Date)asc
,DATEPART(week,OPCS.Slot_Start_Date)asc
それは私に戻っていた結果は正しいですが、私はちょうどそれは、カウントがゼロのリストにそれらの数週間を含める必要があります。
誰かが間違っていると説明してください。私はcteに正しく参加していないと推測していますが、私は同じ結果を生み出す左右両方の結合を試みました。私はまた、上記のクエリステートメントとcteをスワップすることによってクエリを反転しようとしましたが、これはどちらも動作しません。
誰もが示唆しているガイダンスを理解してください。あなたが持っている結果セットに
あなたの助け@Bartosz X.のためのおかげで、残念ながら、これは私のために働いていない - 私は、エラー 'オペランドのタイプを取得していますclash:dateはintと互換性がありませんおそらく私は結合構文が正しくないでしょうか?私は使用しました: 'Right JOIN @ListOfWeeks ON OPCS.Slot_Start_Date = Week_No'これは正しいですか? – Jon295087
いいえ、week_numberに参加してください –
申し訳ありません@Bartosz_X私はまだこの作業を行うことはできません。私はしようとしています: 'RIGHT JOIN @ListOfWEEks ON DATEPART(週、OPCS.Slot_Start_Date)= Week_No'しかし、それでも私はゼロ週なしで同じ結果を返します。私は[Week_Number]への参加を試みましたが、これはエラーを生成します: 'Week_Number'の近くに不正な構文があります.' [週番号]はエイリアス化された列なので参加できません。あなたの助けを感謝します - あなたが私の理解を助けるために具体的にできますか? – Jon295087