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
すると、質問とまったく同じ結果を得ることができます
これを確認してください