0

私はSQLが得意ではないので、どんな助けの世界も素晴らしいです

1月から当月までに登録したレコードを取得するSQLクエリがあります

私のコード例

SELECT DatePart(YEAR, p.createStamp) as TheYear, DatePart(MONTH, p.createStamp) as TheMonth ,  COUNT(p.pId) AS TOTALCOUNT 
FROM profile p with(nolock)
where DatePart(YEAR, p.createStamp) = DATEPART(YEAR, GETDATE())
GROUP BY YEAR(p.createStamp), MONTH(p.createStamp)
ORDER BY YEAR(p.createStamp), MONTH(p.createStamp)

クエリがどのように戻るか

2 月 = 2、3 月 = 3、4 月 = 4、5 月 = 5

Jan = 1 を合計カウント 0 で戻し、June = 6 を合計カウント 0 で戻したいのですが、これを行う方法はありますか?

ありがとうございました。

4

2 に答える 2

0

そこにないものを選択することはできないので、ルックアップ テーブルを作成することをお勧めします。

CREATE TABLE #Months (Year_ INT, Month_ INT)
GO
SET NOCOUNT ON
DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=20)
BEGIN
--Do Stuff
INSERT INTO #Months
SELECT YEAR(DATEADD(MONTH,@intflag,'20121201')),MONTH(DATEADD(MONTH,@intflag,'20121201'))
SET @intFlag = @intFlag + 1
END
GO

「20」を任意の月数に変更し、両方のスポットの「20121201」を検索を開始する月の前の月に変更できます。

次に、そのテーブルに参加すると、次のことがうまくいくと思います。

SELECT m.Year_ as TheYear, m.Month_ as TheMonth ,  ISNULL(COUNT(p.pId),0) AS TOTALCOUNT 
FROM profile p
RIGHT JOIN #Months m
ON DatePart(YEAR, p.createStamp) = m.Year_
AND  DatePart(MONTH, p.createStamp) = m.Month_
where DatePart(YEAR, p.createStamp) = DATEPART(YEAR, GETDATE())
GROUP BY m.Year_, m.Month_
ORDER BY  m.Year_, m.Month_
于 2013-06-06T17:59:45.530 に答える