1

私が現在行っている方法以外に、その年の毎月からカウントを取得するより効率的な方法があるかどうか疑問に思いました。現在、私は単一のselectステートメントを使用して、たとえばJan、Marなどからカウントを取得し、それらすべてを単一のselectステートメントに結合しています。

Select distinct
    count(item1 + item2) as 'Count of Items',
    month(sub_date) as 'month'

from table1
where month(sub_date)='1'
and year(sub_date)='2012'

1〜12か月目からそれを繰り返し、12 selectステートメントに参加して、次のようなテーブルを取得します。

jan feb mar apr may jun july aug sept oct nov dec
1   2   2   1   3   5   5    2    6   7   2   1

クエリをやり直す方法についての情報をいただければ幸いです。

4

2 に答える 2

3

と:GROUP BYの両方でを使用できるはずです。month(sub_date)year(sub_date)

Select 
    count(item1 + item2) as 'Count of Items',
    month(sub_date) as 'month',
    year(sub_date) as year
from table1
group by month(sub_date), year(sub_date)

この結果は複数の行になります。とのGROUP BY両方でmonth複数year年の返品が可能になります。2012年のみを返品する場合は、次のような元のWHERE year(sub_date) =2012条項を含めることができます。

Select 
    count(item1 + item2) as 'Count of Items',
    month(sub_date) as 'month'
from table1
where year(sub_date) = 2012
group by month(sub_date)

次に、各年の1行のデータが必要な場合は、ピボット関数を適用できます。

select *
from
(
    Select item1 + item2 Items,
        month(sub_date) as 'month'
    from table1
    where year(sub_date) =2012
) src
pivot
(
    sum(Items)
    for month in ([1], [2])
) piv

SQL FiddlewithDemoを参照してください。このPIVOT関数は、データを行から列に変換します。

于 2013-03-25T15:00:37.780 に答える
0

GROUP BY必要なものです:http://msdn.microsoft.com/en-us/library/ms177673.aspx

SELECT MONTH(sub_date) AS [month],
       COUNT(item1 + item2) AS [Count of Items]
  FROM table1
 WHERE YEAR(sub_date) = 2012
 GROUP BY MONTH(sub_date)

これは、あなたの投稿から推測したように、特定の年(この場合は2012年)の各月に1つずつ、合計12行が必要であると想定しています。すべての年を含めたい場合は、次のGROUP BYように句に追加できます。

 GROUP BY YEAR(sub_date), MONTH(sub_date)
于 2013-03-25T15:01:14.657 に答える