sql >> データベース >  >> RDS >> Sqlserver

GroupByクエリに欠落している月を含める

    このソリューションでは、必要な月のリストをハードコーディングする必要はありません。開始日と終了日を指定するだけで、月の境界が計算されます。出力に年が含まれているため、12か月以上をサポートし、開始日と終了日が年の境界を超えても、正しく注文して正しい月を表示できるようになります 年。

    DECLARE @StartDate SMALLDATETIME, @EndDate SMALLDATETIME;
    
    SELECT @StartDate = '20120101', @EndDate = '20120630';
    
    ;WITH d(d) AS 
    (
      SELECT DATEADD(MONTH, n, DATEADD(MONTH, DATEDIFF(MONTH, 0, @StartDate), 0))
      FROM ( SELECT TOP (DATEDIFF(MONTH, @StartDate, @EndDate) + 1) 
        n = ROW_NUMBER() OVER (ORDER BY [object_id]) - 1
        FROM sys.all_objects ORDER BY [object_id] ) AS n
    )
    SELECT 
      [Month]    = DATENAME(MONTH, d.d), 
      [Year]     = YEAR(d.d), 
      OrderCount = COUNT(o.OrderNumber) 
    FROM d LEFT OUTER JOIN dbo.OrderTable AS o
      ON o.OrderDate >= d.d
      AND o.OrderDate < DATEADD(MONTH, 1, d.d)
    GROUP BY d.d
    ORDER BY d.d;
    


    1. PostgreSQLデータソースをWildFly9.0に追加するにはどうすればよいですか?

    2. MariaDBでのEXTRACT()のしくみ

    3. LEFT JOINを使用してクエリを実行すると、カウントが0の行が返されません。

    4. MicrosoftAccessでインベントリデータベースを作成する方法