2016-10-04 84 views
3

我有一個表SQL SUM相同的列

CREATE TABLE [dbo].[StackOverflow] 
(
    [ArticleId] [bigint] NULL, 
    [Quantity] [decimal](18, 0) NULL, 
    [Type] [smallint] NULL 
) ON [PRIMARY] 

這個表裏面我有一些結果看起來像這樣

ArticleId  Quantity  Type 
------------- ------------ ------ 
10    50   1 
12    20   1 
10    10   1 
10    18   1 
12    5   2 
17    14   2 
10    30   2 
  • 1型是指文章是計劃生產
  • 類型2表示物品已完成

我需要輸出的查詢其示出了箱的所有文章的列表

輸出=刨光 - 完成

:條款ArticleID:10計劃量爲:78完成數量是:

30輸出= 78 - 30 =

我真的沒有什麼可顯示的。我只知道我需要按ArticleId進行分組。

我試過這樣

SELECT 
    articleid, 
    SUM(quantity) - (SELECT SUM(quantity) 
        FROM stackoverflow 
        WHERE type = 2 
         AND main.articleId = stackoverflow.articleId 
        GROUP BY articleid) 
FROM 
    stackoverflow AS main 
WHERE 
    type = 1 
GROUP BY 
    articleid 
+0

您的表定義看起來像SQL Server,所以我相應地更改了標記。 –

+0

@MageeWorld剛剛編輯 –

回答

3

你需要。減去這兩種類型的聚集和:

SELECT 
    [ArticleId], 
    SUM(CASE WHEN [Type] = 1 THEN [Quantity] ELSE 0 END) - SUM(CASE WHEN [Type] = 2 THEN [Quantity] ELSE 0 END) AS [PlannedSubQuantityTotal] 
FROM [dbo].[StackOverflow] 
GROUP BY [ArticleId] 

或使用「絕招」與求和與一個-前綴計劃共同完成:

SELECT 
    [ArticleId], 
    SUM(CASE WHEN [Type] = 1 THEN [Quantity] WHEN [Type] = 2 THEN -[Quantity] ELSE 0 END) AS [PlannedSubQuantityTotal] 
FROM [dbo].[StackOverflow] 
GROUP BY [ArticleId] 
8

您可以使用案例和金額

select ArticleId , sum(case type 
         when 1 then Quantity 
         when 2 then -Quantity 
        end) Output 
from stackoverflow 
group by ArticleId