2016-11-18 3 views
1

開いているチケット/クローズドチケットのグループをすべて日付でカウントしようとしています。いくつかの日付は両方の値が0になりますが、私はまだ日付を表示したいと思います。私は近くにいるように感じますが、グループ化が正しく行われていないように見えます。SQL複数のサブクエリを結合する - 日付でオープン/クローズする

DECLARE @DateFrom AS DATE = '11/16/2016' 
DECLARE @DateTo AS DATE = GETDATE() 

WITH DateRanges AS 
(SELECT @DateFrom AS 'DateValue' 
UNION ALL 
SELECT DATEADD(DAY, 1, DateValue) 
FROM DateRanges 
WHERE DateValue < @DateTo) 

SELECT CONVERT(varchar(10),DateValue, 101) AS "DateVal", 

(SELECT 
COUNT(OPENDATE) 
FROM DateRanges AS a 
LEFT OUTER JOIN MAINTABLE 
ON a.DateValue = convert(varchar(10), DATEADD(hh, DATEDIFF(HH, GetUTCDATE(), GETDATE()), OPENDATE), 101) 
) AS opn, 


(SELECT 
COUNT(CLOSEDDATE) 
FROM DateRanges AS b 
LEFT OUTER JOIN MAINTABLE 
ON b.DateValue = convert(varchar(10), DATEADD(hh, DATEDIFF(HH, GetUTCDATE(), GETDATE()), CLOSEDDATE), 101) 
) AS cls 

FROM DateRanges 
GROUP BY CONVERT(varchar(10),DateValue, 101) 

これは、次のように生成します。

DateVal | opn | cls 
11/16/2016 | 3 | 3 
11/17/2016 | 3 | 3 
11/18/2016 | 3 | 3 

MainTable

ID | OPENDATE | CLOSEDDATE 
123 | 11/16/2016 | 11/16/2016 
124 | 11/16/2016 | 11/18/2016 
125 | 11/18/2016 | 11/18/2016 

予想される出力

DateVal | opn | cls 
11/16/2016 | 2 | 1 
11/17/2016 | 0 | 0 
11/18/2016 | 1 | 2 

はあなたの助け

いただきありがとうございます3210
+0

'MAINTABLE'のスキーマは何ですか? –

+0

MAINTABLEには、OPENDATE、CLOSEDDATE、IDがあります。次のようになります。 ID | OPENDATE |閉鎖日 123 | | 11/16/2016 | 11/18/2016 – Nick

+0

NickあなたがMainTableにサンプルデータを表示し、期待される出力が表示された場合、私たちはもっと役立つでしょう。あなたの期待される結果は?あなたはこれまでに何が得られているかを見ることができますが、許容できる出力のために見たいものは誰も知っていません。ありがとう –

答えて

2

あなたはあなたのアプローチを使用することができますが、あなたの代わりに合計で、サブクエリを相関必要があります。

WITH DateRanges AS (
     SELECT @DateFrom AS 'DateValue' 
     UNION ALL 
     SELECT DATEADD(DAY, 1, DateValue) 
     FROM DateRanges 
     WHERE DateValue < @DateTo 
    ) 
SELECT CONVERT(varchar(10), DateValue, 101) AS "DateVal", 
     (SELECT COUNT(mt.REQDATE) 
     FROM MAINTABLE mt 
     WHERE dr.DateValue = convert(varchar(10), DATEADD(hour, DATEDIFF(hour, GetUTCDATE(), GETDATE()), mt.OPENDATE), 101) 
    ) AS opn, 
     (SELECT COUNT(CLSDDATE) 
     FROM MAINTABLE mt 
     WHERE dr.DateValue = convert(varchar(10), DATEADD(hh, DATEDIFF(hour, GetUTCDATE(), GETDATE()), mt.CLOSEDDATE), 101) 
    ) AS cls 
FROM DateRanges dr; 

はまた、あなたが外側のクエリで集計を必要としないように注意してください。

+0

これは働いた! 1つ目のサブクエリにFROM MAINTABLE mtを入れて2番目のサブクエリに合わせる必要がありましたが、完全に機能しました!ありがとう、私はそれを感謝します。 – Nick

関連する問題