SQL对相同列求和
我有一张桌子SQL对相同列求和,sql,sql-server,Sql,Sql Server,我有一张桌子 CREATE TABLE [dbo].[StackOverflow] ( [ArticleId] [bigint] NULL, [Quantity] [decimal](18, 0) NULL, [Type] [smallint] NULL ) ON [PRIMARY] 在这个表中,我有一些结果,看起来像这样 ArticleId Quantity Type ------------- ------------ ------ 10
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
分组
我试过这样做
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
您需要减去这两种类型的合计和:
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]
您可以使用case和sum
select ArticleId , sum( case type
when 1 then Quantity
when 2 then -Quantity
end) Output
from stackoverflow
group by ArticleId
您的表定义看起来像SQL Server,因此我相应地更改了标记。@mageworld刚刚点击编辑