【问题标题】:Add Serial# from initial item listing table to counted item table w/out Serial# in SQL在 SQL 中将序列号从初始项目列表表添加到不带序列号的计数项目表
【发布时间】:2019-09-06 20:19:27
【问题描述】:

我正在处理一个小型库存项目,我有两个表要以特定方式合并。

这是我的两张桌子:

表 1(初始项目列表):

   Scan#      ItemNUmber   Serial#
----------- ----------- ---------------
  374         123458      10
  374         123458      11
  374         123458      30

表 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

我知道我忘记了什么。非常感谢任何帮助或指向可以提供帮助的地方的链接。

【问题讨论】:

  • 你怎么知道哪个 Barcode# 对应哪个 SN#?
  • 您是否打算依赖列出的顺序并将第一行与第一行、第二与第二等进行匹配?

标签: sql sql-server sql-server-2012-express


【解决方案1】:

如果要按序号匹配行,则需要将其添加到:

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 表代表无序 集合。如果第三列提供了排序,这对您有用。

【讨论】:

    【解决方案2】:

    执行 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-11
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多