簡體   English   中英

如何在SQL Server中根據日期范圍添加不同的行

[英]How to add different rows based on date range in sql server

我想基於不同的日期范圍添加列,然后將每個日期范圍的相應總和放入視圖中。

我有一個如下表:

Date_From   Available  
01/03/2011       5  
06/03/2011       6  
25/03/2011       7   
14/04/2011       9  
20/04/2011      10  

我想要在這樣的視圖中輸出:

              Q3        Q4  
Sum           18        19  

其中Q3和Q4是3月和4月的總記錄。

有人可以告訴我該怎么做嗎?

我將假設您不僅只關注3月和4月,而且您真正想要的是每月匯總,每個匯總都在其自己的列中。 由於您使用的是SQL Server 2005,因此可以使用動態PIVOT進行此操作。 以下代碼經過測試,應在單獨的列中返回每個月的總計。 我還添加了年份,以防您運行了多年的大量數據。 您可以通過更改生成的日期字符串來更改列標題,盡管您必須注意使其唯一並與所需的列分組相對應:

CREATE TABLE ##Tab (date_from datetime, available int)
INSERT INTO ##Tab (date_from, available) VALUES ('3/1/2011', 5)
INSERT INTO ##Tab (date_from, available) VALUES('3/6/2011', 6)
INSERT INTO ##Tab (date_from, available) VALUES('3/25/2011', 7)
INSERT INTO ##Tab (date_from, available) VALUES('4/14/2011', 9)
INSERT INTO ##Tab (date_from, available) VALUES('4/20/2011', 10)

DECLARE @month_year varchar(2000)
SELECT  @month_year = STUFF(
   ( SELECT DISTINCT '],[' + CAST(datepart(mm, date_from) AS varchar) + 
         '/' + CAST(datepart(yy, date_from) AS varchar)
     FROM    ##Tab
     ORDER BY '],[' + CAST(datepart(mm, date_from) AS varchar) + 
         '/' + CAST(datepart(yy, date_from) AS varchar)
     FOR XML PATH('')
   ), 1, 2, '') + ']'

DECLARE @dyn_pivot nvarchar(max)

SET @dyn_pivot =
    N'
        SELECT *
        FROM
        (
            SELECT CAST(datepart(mm, date_from) AS varchar) + ''/'' + CAST(datepart(yy, date_from) AS varchar) dt, SUM(available) AS available
            FROM ##Tab
            GROUP BY CAST(datepart(mm, date_from) AS varchar) + ''/'' + CAST(datepart(yy, date_from) AS varchar)
        ) AS SourceTable
        PIVOT
        (
            AVG(available)
            FOR dt IN (' + @month_year + N')
        ) AS PivotTable
    '

EXEC (@dyn_pivot)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM