在SQL中将序列号#从初始项目列表表添加到计数项目表w/out Serial#
我正在做一个小的库存项目,我有两个表,我想以一种特定的方式合并 这是我的两张桌子: 表1(初始项目清单): 表2(计数产品): 以下是我正在使用的代码:在SQL中将序列号#从初始项目列表表添加到计数项目表w/out Serial#,sql,sql-server,sql-server-2012-express,Sql,Sql Server,Sql Server 2012 Express,我正在做一个小的库存项目,我有两个表,我想以一种特定的方式合并 这是我的两张桌子: 表1(初始项目清单): 表2(计数产品): 以下是我正在使用的代码: SELECT DISTINCT * FROM (SELECT * FROM (SELECT ScannedItems.CountTagId, ScannedItems.ItemNumber, ScannedItems.barcode FROM ScannedItems U
SELECT DISTINCT *
FROM (SELECT *
FROM
(SELECT ScannedItems.CountTagId, ScannedItems.ItemNumber, ScannedItems.barcode
FROM ScannedItems
UNION ALL
SELECT CountId, ItemNumber, SerialNumber
FROM FrozenData
) Tbls
GROUP BY ItemNumber, CountTagId, Barcode
HAVING COUNT(*)<2
) Diff
以下是我希望它输出的内容(不包括串行#30,因为它没有被计算在内):
我知道我忘了什么。非常感谢您提供的任何帮助或指向某个可以提供帮助的地方的链接。执行Unino All操作就是将表堆叠在彼此的顶部,这就是为什么要获得额外的行。其次,既然扫描和ProductNo是一样的,你怎么知道30的SN是没有扫描的 但你可以这样做:
Select t1.scan#, t1.ItemNumber, t2.Barcode#, t1.Serial#
from table1 t1
join table2 t2
on t1.scan# = t2.scan#
and t1.ItemNumber = t2.ItemNumber
如果要按序列号匹配行,则需要将其添加到:
select si.*, fi.barcode
from (select si.*,
row_number() over (partition by scan, itemnumber order by serial) as seqnum
from ScannedItems si
) si join
(select fi.*,
row_number() over (partition by scan, itemnumber order by barcode) as seqnum
from FrozenItems fi
) fi
on fi.scan = si.scan and
fi.itemnumber = si.itemnumber and
fi.seqnum = si.seqnum;
SQL表表示无序集。如果订单由第三列提供,这将对您有效。您如何知道哪个条形码与哪个序列号匹配?您是否打算依赖列出的订单,并将第一行与第一行、第二行与第二行等匹配。?
Scan# ItemNUmber Serial#
----------- ----------- ---------------
374 123458 10
374 123458 11
374 123458 30
374 123458 926373700243
374 123458 926373700267
Scan# ProductNo Barcode# SN#
----------- ----------- --------------- -----
374 123458 926373700243 10
374 123458 926373700267 11
Select t1.scan#, t1.ItemNumber, t2.Barcode#, t1.Serial#
from table1 t1
join table2 t2
on t1.scan# = t2.scan#
and t1.ItemNumber = t2.ItemNumber
select si.*, fi.barcode
from (select si.*,
row_number() over (partition by scan, itemnumber order by serial) as seqnum
from ScannedItems si
) si join
(select fi.*,
row_number() over (partition by scan, itemnumber order by barcode) as seqnum
from FrozenItems fi
) fi
on fi.scan = si.scan and
fi.itemnumber = si.itemnumber and
fi.seqnum = si.seqnum;