-1

2012-07-08 と 2013-02-06 のような 2 つの日付があるとします。各ユーザーのレコードを毎月カウントする必要があります。特定の月のユーザーのデータがない場合は、ゼロを返す必要があります。出力は次のようになります:-

id name   July-12 August-12 September-12 October-12 November-12 December-12 January-13 February-13
1  John      1        2          0            0         1           1           2      2    
2  David     0        1          0            1         1           1           2      2
3  Marry     2        1          0            0         0           1           2      2
4

2 に答える 2

2

cant use BETWEENデートの場合でもBETWEENでもご利用いただけますinclusive。そのような場合には、使用することをお勧めします

startdate>='2012-07-08 ' and enddate<=2013-02-06

12AM2013-02-06として扱われる ため2013-02-06 00:00:00

あなたの問題に対してこの解決策を試してください

DECLARE @temp AS TABLE(Month_Name varchar(25),ContactName varchar(50)) -- newly added

;WITH cte
AS 
(
     SELECT datename(month, @startdate) AS [Month_Name], @startdate AS dat
UNION ALL
     SELECT datename(month, DateAdd(Month, 1, dat)), DateAdd(Month, 1, dat) 
     FROM cte
     WHERE DateAdd(Month, 1, dat) < @enddate

)

INSERT INTO @temp
SELECT c.Month_Name,Cs.username
FROM cte c  CROSS JOIN usertbale Cs
ORDER BY c.Month_Name

SELECT c.Month_Name,c.username,ISNULL(tt.coun,0) as coun
FROM @temp c LEFT JOIN
(
    SELECT  datename(month,OrderDate) AS month_Name
           ,count(OrderID) as coun
           ,ContactName
    FROM tblpublisher p INNER JOIN tbluser  u ON u.userid=p.userid
    GROUP BY month_Name,datename(month,publishdate)
) as tt 
ON c.Month_Name=tt.month_Name AND c.username=tt.username

編集

上記のクエリを使用pivotすると、質問とまったく同じ結果を得ることができます これを確認してください

于 2013-07-08T10:43:13.110 に答える