sql - 将同一表上的 BOM 数量与 SQL Server 2012 进行比较
问题描述
我正在尝试在同一张表中获取 2 个产品之间的比较材料清单。我有一张BOM
桌子
我想比较数量
PRODUCT A FROM ID=1
至 PRODUCT CCC FROM ID=2
SUPPLIERPN
是独特的(ID, PRODUCT)
组合
预期结果
我的问题:如何使用 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;
推荐阅读
- html - CSS 过渡:不透明度和可见性过渡不适用于 Firefox(适用于 Chrome / Safari)
- javascript - 将字符串转换为 Javascript
- dynamics-crm - 数据工厂链接服务通用数据服务
- php - 如何使用 PHPUnit 测试构造函数的正确调用
- macos - 如何在macos上查找dmg文件的版本
- flutter - Flutter:Cloud Firestore serverTimestamp() 使文档读取加倍
- php - WooCommerce 结帐 - 更新运费
- ios - 扩展如何与 Swift 中的类一起工作?
- node.js - 是否可以从节点 js 编辑 JSON 中的字段?
- r - 无法在 R 中读取 shp 文件