10

私はこの簡単なクエリを持っています:

SELECT YEAR(P.DateCreated)
      ,MONTH(P.DateCreated)
      ,COUNT(*) AS cnt
FROM   tbl1,
       tbl2....
GROUP BY
         MONTH(P.DateCreated)
        ,YEAR(P.DateCreated)

これは次のように出力されます:

ここに画像の説明を入力

今、私は同じクエリが必要ですが、groupbyは年に1回だけです:

それで :

SELECT YEAR(P.DateCreated)

      ,COUNT(*) AS cnt
FROM   tbl1,
       tbl2....
GROUP BY
         YEAR(P.DateCreated)

私は2つのクエリを作成したくありません

ここで条件付きを行う方法はありgroup byますか?

1つを別のものに置き換えることできますが、 1つを2つに置き換えることはできません...

GROUP BY
     CASE WHEN @timeMode='y' THEN YEAR(P.DateCreated)
          WHEN @timeMode='m' THEN MONTH(P.DateCreated), YEAR(P.DateCreated) end

ここに画像の説明を入力

何か助けはありますか?

4

2 に答える 2

23

2 つの別々のクエリを使用したほうがよいでしょうが、次のように行うことができます

GROUP BY YEAR(P.DateCreated),
       CASE 
          WHEN @timeMode='m' THEN MONTH(P.DateCreated) end

WHEN @timeMode <> 'm'2 番目のGROUP BY式はNULLすべての行を対象としており、結果には影響しません。

于 2012-06-24T12:12:52.700 に答える
7

句を使用してover、1 つのクエリで年単位と月単位の両方の数を返すことができます。

SELECT  distinct YEAR(P.DateCreated) as Year
,       MONTH(P.DateCreated) as Month
,       COUNT(*) over (partition by YEAR(P.DateCreated), MONTH(P.DateCreated)) 
            as MonthCount
,       COUNT(*) over (partition by YEAR(P.DateCreated)) as YearCount
FROM   YourTable P

SQL Fiddle での実例。

于 2012-06-24T12:10:02.547 に答える