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
将同一表格上的BOM数量与SQL Server 2012进行比较_Sql_Sql Server - Fatal编程技术网

将同一表格上的BOM数量与SQL Server 2012进行比较

将同一表格上的BOM数量与SQL Server 2012进行比较,sql,sql-server,Sql,Sql Server,我试图得到同一表格中两种产品的物料清单比较。我有一张BOM表 我想比较一下你们的数量 产品A从ID=1到产品CCC从ID=2 供应商PN在ID、产品组合方面是唯一的 预期结果 我的问题是:如何使用SQL获得预期的结果 我的SQL Server语法知识无法满足基本查询的要求,因此我不知道如何做到这一点。我试图搜索,但我不知道描述这类问题的正确术语 通常,我在应用程序站点中解决了此类问题,从数据库服务器加载所有数据,然后进行比较。没有CCC,555,因此该产品的预期输出不正确。老实说,如果您不能手动

我试图得到同一表格中两种产品的物料清单比较。我有一张BOM表

我想比较一下你们的数量

产品A从ID=1到产品CCC从ID=2

供应商PN在ID、产品组合方面是唯一的

预期结果

我的问题是:如何使用SQL获得预期的结果

我的SQL Server语法知识无法满足基本查询的要求,因此我不知道如何做到这一点。我试图搜索,但我不知道描述这类问题的正确术语


通常,我在应用程序站点中解决了此类问题,从数据库服务器加载所有数据,然后进行比较。

没有CCC,555,因此该产品的预期输出不正确。老实说,如果您不能手动执行此操作并获得正确的输出,那么您将面临更大的问题。此外,发布图像是提供信息的可怕方式

但这里有一种解释试图纠正你所有的错误。我在写完之后才意识到您的pn是字符串而不是数字-这就是为什么用于填充表变量的文本没有引号的原因

set nocount on;
declare @x table (salesid tinyint, product varchar(3), supplierpn varchar(5), qty decimal(5,2)); 
insert @x (salesid, product, supplierpn, qty) values
(1, 'A', 1234, 1), (1, 'A', 555, 2), (1, 'A', 666, 3), 
(1, 'BBB', 1234, 4), (1, 'BBB', 555, 5), 
(2, 'CCC', 1234, 6), (2, 'CCC', 666, 7), (2, 'CCC', 777, 8), (2, 'CCC', 888, 9) ; 
select * from @x order by salesid, product, qty;

with cte_a as (select supplierpn, qty from @x where salesid = 1 and product = 'A'), 
cte_ccc as (select supplierpn, qty from @x where salesid = 2 and product = 'CCC') 
select isnull(cte_a.supplierpn, cte_ccc.supplierpn) as supplierpn,
   cte_a.qty as qty_a, 
   cte_ccc.qty as qty_ccc, 
   isnull(cte_ccc.qty, 0) - isnull(cte_a.qty, 0) as delta 
from cte_a full join cte_ccc on cte_a.supplierpn = cte_ccc.supplierpn 
order by supplierpn;

数量为3.00的产品A如何适用于777的供应商PN?您的示例数据与您期望的结果不匹配,或者我在解释您的逻辑时遗漏了一些内容。@jnevil,对不起,我将行移动了1-编辑图片2,CCC,888发生了什么?那也不见了吗?我的头有点晕眩,所以我没有把它弄对。