2016-10-04 41 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