Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL对相同列求和_Sql_Sql Server - Fatal编程技术网

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:10计划数量为:78完成数量为:

30输出=78-30=48

我真的没有什么可展示的。我只知道我需要按
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刚刚点击编辑