将序列号从初始项目列表 table 添加到计数项目 table w/out SQL 中的序列号
Add Serial# from initial item listing table to counted item table w/out Serial# in SQL
我正在做一个小型库存项目,我有两个表想以特定方式合并。
这是我的两个表:
Table 1(初始项目列表):
Scan# ItemNUmber Serial#
----------- ----------- ---------------
374 123458 10
374 123458 11
374 123458 30
Table 2(计数产品):
Scan# ItemNumber Barcode#
----------- ----------- ---------------
374 123458 926373700243
374 123458 926373700267
这是我使用的代码:
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
这是输出:
Scan# ItemNUmber Serial#
----------- ----------- ---------------
374 123458 10
374 123458 11
374 123458 30
374 123458 926373700243
374 123458 926373700267
这是我希望它输出的内容(不包括序列号 30,因为它未被计算在内):
Scan# ProductNo Barcode# SN#
----------- ----------- --------------- -----
374 123458 926373700243 10
374 123458 926373700267 11
我知道我忘记了什么。非常感谢任何帮助或 link 到可以提供帮助的地方。
做 Unino All 是将表格堆叠在一起,这就是为什么会得到额外的行。其次,因为scan#和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 table 表示 无序 集合。如果第三列提供了排序,这对你有用。
我正在做一个小型库存项目,我有两个表想以特定方式合并。
这是我的两个表:
Table 1(初始项目列表):
Scan# ItemNUmber Serial#
----------- ----------- ---------------
374 123458 10
374 123458 11
374 123458 30
Table 2(计数产品):
Scan# ItemNumber Barcode#
----------- ----------- ---------------
374 123458 926373700243
374 123458 926373700267
这是我使用的代码:
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
这是输出:
Scan# ItemNUmber Serial#
----------- ----------- ---------------
374 123458 10
374 123458 11
374 123458 30
374 123458 926373700243
374 123458 926373700267
这是我希望它输出的内容(不包括序列号 30,因为它未被计算在内):
Scan# ProductNo Barcode# SN#
----------- ----------- --------------- -----
374 123458 926373700243 10
374 123458 926373700267 11
我知道我忘记了什么。非常感谢任何帮助或 link 到可以提供帮助的地方。
做 Unino All 是将表格堆叠在一起,这就是为什么会得到额外的行。其次,因为scan#和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 table 表示 无序 集合。如果第三列提供了排序,这对你有用。