0

チケットのテーブルがあります。今年の月末に「オープン」したチケットの数を計算しようとしています。同様に、私はこれを棒グラフにプッシュしており、LINQを介してこれを配列に配置する必要があります。

計算を取得するためのSQLクエリは次のとおりです。

SELECT
    (SELECT COUNT(*) FROM tblMaintenanceTicket t WHERE (CreateDate < DATEADD(MM, 1, '01/01/2012')))
    -
    (SELECT COUNT(*) FROM tblMaintenanceTicket t WHERE (CloseDate < DATEADD(MM, 1, '01/01/2012'))) AS 'Open @Month End'

私の論理は次のとおりです。月末までに開いているすべてのチケットをカウントします。月末までにクローズされたチケットからそのカウントを差し引きます。

更新: 以下のコメントでクエリを更新しましたが、GROUPのエラーでは機能していませんが、推測するロジックを本当に理解していません。SQLのスキルが不足していることが原因です。

クエリを表示するSQLFiddleの例を追加しました:http ://sqlfiddle.com/#!3 / c9b638 / 1

必要な出力:

-----------
| Jan | 3 |
-----------
| Feb | 4 |
-----------
| Mar | 0 |
-----------
4

2 に答える 2

1

クエリが必要なものを返している場合は、を使用DATENAME(MONTH, yourDate)して月を取得し、Month、Yearでグループ化します。

 SELECT SUM(*), DATENAME(MONTH,yourDate), DATEPART(YEAR,yourDate)
 FROM
 (
     your actual query here
 )
 GROUP BY DATENAME(MONTH,yourDate), DATEPART(YEAR,yourDate)
于 2012-12-07T17:24:09.487 に答える
1

SQLにはいくつかのエラーがあります。。。グループ化されてCreateDateいますが、サブクエリの列としてはありません。また、に列エイリアスがありませんcount(*)

私はこれがあなたがやろうとしていることだと思います:

select DATENAME(MONTH,CreateDate), DATEPART(YEAR,CreateDate),
       (sum(case when CreateDate < DATEADD(MM, 1, '01/01/2012') then 1 else 0 end) -
        sum(case when CloseDate < DATEADD(MM, 1, '01/01/2012') then 1 else 0 end)
       )
from tblMaintenanceTicket
group by DATENAME(MONTH,CreateDate), DATEPART(YEAR,CreateDate)

あなたのコメントはあなたがあなたの質問よりも明確にしたいことを明らかにしているようです(質問の説明は少し埋もれています)。必要なのは、月のドライバーテーブルであり、これをテーブルに結合します。何かのようなもの:

select mons.yr, mons.mon, count(*) as OpenTickets
from (select month(CreateDate) as mon, year(CreateDate) as yr,
             cast(min(CreateDate) as date) as MonthStart,
             cast(max(CreateDate) as date) as monthEnd
      from tblMaintenanceTicket
      group by month(CreateDate), year(CreateDate) 
     ) mons left outer join
     tblMaintenanceTicket mt
     on mt.CreateDate <= mons.MonthEnd and
        (mt.CloseDate > mons.MonthEnd or mt.CloseDate is null)
group by mons.yr, mons.mon

レコードは毎日作成されると思います。これは便利なので、他のSQL関数を使用して毎月の最初と最後の日を取得することを考える必要はありません。

于 2012-12-07T18:43:44.433 に答える