1

SQL Server 2008 R2 を使用しており、異なる列で複数のカウントを実行しようとしていますが、正しく動作させる方法がわかりません。独立して機能する 2 つのクエリがありますが、それらを結合しようとすると問題が発生します。@StartDate と @EndDate を通過させながら、個々の日付ごとにオープンおよびクローズされたチケットの数をカウントしようとしています。

たとえば、これが私の最初のクエリです: (チケットが作成されたさまざまな理由を区別するために特定のコードを割り当てます。その行が混乱を招く場合に備えて、それをそこに捨てたかっただけです。また、日付は日時形式であるため、CAST を使用しています)

SELECT 
Cast(CreateDate AS Date) AS 'Date',
Count(CreateDate) AS '# Created'

FROM dbo.Tickets

WHERE 
Cast(CreateDate AS Date) >= @StartDate and 
Cast(CreateDate AS Date) <=@EndDate and
(Reason >= 36 and Reason <= 41 OR Reason = 17)

GROUP BY Cast(CreateDate AS Date)

ORDER BY 'Date'

これにより、次の結果が得られます。

Date             # Created
----------       -------------
5/1/2013         396
5/2/2013         418
5/3/2013         288
5/4/2013         28
5/5/2013         100

私の 2 番目のクエリは、"Create Date" クエリとまったく同じですが、"CreateDate" がどこにあるかを "Resolved Date" に置き換えただけです。ただし、2013 年 5 月 4 日に解決されたチケットはありませんでした。

これら 2 つのクエリを 1 つに結合し、以下のような結果セットを返すにはどうすればよいですか?

 Date             # Created           # Resolved
----------       -------------        -------------
5/1/2013         396                  400
5/2/2013         418                  322
5/3/2013         288                  280
5/4/2013         28                   0 
5/5/2013         100                  11

私をうんざりさせているのは、テーブルに 2013 年 5 月 4 日の解決済みの日付がないことだと思います。どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

1

これを試して:

with all_dates(the_date)
as
(
    select min(cast(createdate as date))
    from tickets
    UNION ALL
    select DATEADD(day,1,the_date)
    from all_dates
    where all_dates.the_date < GETDATE()+1

)

select the_date,
        SUM(case when CAST(t.createdate as DATE) = ad.the_date then 1 else 0 end) as CreatedCount,
        SUM(Case when CAST(t.resolveddate as DATE) = ad.the_date then 1 else 0 end) as ResolvedCount
from all_dates ad
left outer join tickets t 
on ad.the_date = CAST(t.createdate as DATE)
or ad.the_date = CAST(t.resolveddate as DATE)
group by ad.the_date
option (MAXRECURSION 10000)

最初の作成日から今日までのすべての日付を保持する CTE を作成しました。こうすることで、ある日に作成または解決されたチケットがない場合でも、結果にその日が表示されます。

于 2013-05-22T13:50:27.420 に答える