2015-11-02 47 views
0

我有兩個查詢分別給出了購買的工作單元數和客戶端使用的工作單元數。從兩個查詢中爲每行增加一列

我是一個SQL Server上工作2014

的WUBought查詢返回這樣的例子:

Customer Year Month UnitBought 
Cust1  2015 6  50 
Cust2  2014 7  100 
Cust1  2013 10  30 
Cust3  2015 2  40 

其他查詢返回被客戶端所消耗的數量:

Customer Year Month UnitConsumed 
Cust1  2015 2  6 
Cust1  2015 5  20 
Cust2  2015 3  8 
Cust1  2015 4  3 
Cust3  2015 2  10 

我基本上試圖做的是每月購買的東西的總和減去已消耗的東西。這裏是什麼,我想,作爲第六個月Cust1結果的一個例子:

Customer Year Month Remaining 
Cust1  2015 1  30 
Cust1  2015 2  24 
Cust2  2015 3  24 
Cust1  2015 4  21 
Cust3  2015 5  1 
Cust3  2015 6  51 

返回的吳用UNION買了所有從每月列出一個表的查詢,以獲得每月甚至如果沒有價值:

SELECT Customer, [Year], [Month], SUM(UOBought) AS UORest 
    FROM WU_Bought 
    GROUP BY [Customer], [PurchaseDate] 
UNION ALL 
SELECT '' AS Customer, [Year], [Month], '' AS UORest 
    FROM Months 
    GROUP BY [Year], [Month] 

這裏是每月每求和買單元,與同工會語句的查詢:現在我覺得我必須調整的F

SELECT Customer, [Year], [Month], SUM(TotalConsumed) * -1 AS UORest 
    FROM WUConsumed 
    GROUP BY Customer, Year, Month 
UNION ALL 
SELECT '' AS Customer, [Year], [Month], '' AS UORest 
    FROM EveryMonths 
    GROUP BY Year, Month 

第一個,迫使它保留以前的總和,但我不知道我該怎麼做。

回答

0

好吧,我明白了。

我所做的是真正的 「簡單」,使用SQL Server功能,可自2012年: ROWS UNBOUNDED PRECEDING

Here is a pretty clear article有關此功能。

我創建分組約消耗和購買單位查詢的結果與UNION ALL子句,名爲「WU_Closing_View」的另一種觀點,然後用行無界內它前茬:

SELECT Customer, Year, Month, SUM(Closing) OVER(PARTITION BY Customer ORDER BY Year, Month ROWS UNBOUNDED PRECEDING) AS Closing 
    FROM WU_Closing_View 
    GROUP BY Customer, Year, Month, Closing 
UNION ALL 
SELECT  '' AS Customer, Year, Month, '' AS Sum_bought 
    FROM   Months 
    GROUP BY Year, Month 
    ORDER BY Customer, Year, Month 

注意,我使用PARTITION BY,以便由客戶端總結。因爲我想每個月都在一個SSRS矩陣中顯示,所以我添加了一個「UNION ALL」,指向一個從2010年到2017年的空表客戶端的每年和每月的表格。但是,如果您不需要每個月的進化。

可能有一個更簡單的方法,但這是我迄今發現的。

0

這是否適合您?

​​
+0

Namrehs,我不得不添加c.units_consumed到group by子句,因爲它給了我一個錯誤。我對這個查詢還有一些問題:不知何故,它不會保留之前購買的單位,我認爲,並且只給了我一個月客戶購買更多單位的結果。 –

相關問題