sql - SQL Server 中是否有一种方法可以显示两个具有相同布局并共享一些公共数据的表之间的字段差异
问题描述
我在两个数据库(两个不同的组织)上有两个表,它们具有相同的布局 - 它们是物料主表。一个列出了大约 600k 材料,一个列出了大约 100k - 它们共享大约 35k 相同的材料。问题是一个组织可能具有与另一个组织不同的属性,即一个组织的价格可能不同,或者一个组织与另一个组织的季节可能不同。如果可能的话,我试图找到一种方法来并排展示,一个组织中的材料与另一个组织中的材料之间存在差异。到目前为止,我只提出了下面的代码 - 它正在使用 EXCEPT 但似乎它只能从一行或另一行返回数据,而我试图同时查看两者。有什么想法吗?
我已经尝试过使用 EXCEPT 语句,但只得到了结果的一侧。
select * from pdx_sap_user..vw_mm_material
where material in (select material
from pdx_sap_user..vw_mm_material
where material in (select material from usts_user..vw_mm_material)) -- used to get to the shared materials
EXCEPT
select * from usts_user..vw_mm_material
我想获得共享的 35k 材料,并能够展示它们的不同之处。作为参考,这些表中有大约 300 列,因此列出每一列可能有点麻烦。
样本数据:
解决方案
您可以从每个组织表中选择常用材料,并添加一个组织伪列。然后只需将这两个查询合并在一起并对它们进行排序,使行一个接一个地排列。
DECLARE @og1Mats TABLE (
Material INT, Description NVARCHAR(50), Color NVARCHAR(50), MSRP INT
)
DECLARE @og2Mats TABLE (
Material INT, Description NVARCHAR(50), Color NVARCHAR(50), MSRP INT
)
INSERT INTO @og1Mats VALUES (11040, 'World Cup', 'black', 100),(11050, 'Fabric', 'yellow', 10),(11060, 'Steel', 'gray', 50);
INSERT INTO @og2Mats VALUES (11040, 'World Cup', 'black', 120),(11030, 'Concrete', 'gray', 10),(11060, 'Steel', 'black', 55);
WITH common AS (
SELECT o1.Material FROM @og1Mats o1
INNER JOIN @og2Mats o2 ON o1.Material=o2.Material
)
SELECT o1.*, 1 as organization
FROM @og1Mats o1
INNER JOIN common c ON c.Material=o1.Material
UNION ALL
SELECT o2.*, 2 as organization
FROM @og2Mats o2
INNER JOIN common c ON c.Material=o2.Material
ORDER BY
Material
, organization
这将为您提供类似于示例数据的输出,其中行按材料和组织分组。然后,您可以使用它手动或使用其他工具比较数据。
推荐阅读
- python - 代码在本地主机上工作,但不在服务器上 - https://www.nseindia.com/api/equity-stockIndices?index=NIFTY%2050 - python
- regex - Flutter dart 使用正则表达式将字符串拆分为较小的组
- c# - API 中的哪里是 ApiName 的值,用于分配 IdentiyServer4 的授权?
- node.js - React API 调用状态永远挂起
- sorting - QGIS如何永久更改记录顺序?(对记录/特征进行永久排序并输出一个新的 shapefile)
- apache-spark - Spark 表和 Ranger Row 过滤
- javascript - 进行排序并加载更多系统(NodeJS 路由 + MySQL)
- c++ - 指向方法问题的指针
- javascript - react-datepicker 没有正确显示日期
- c# - Unity C#-rigidbody.moveposition 的 Lerp 问题