根据其他表信息聚合行

时间:2017-01-12 11:08:33

标签: sql r postgresql sas

我正在寻找一种方法来重新聚合某些行,并使用来自另一个表的给定聚合信息。

  • 我有1张包含详细信息的表格:带有SKU的门票
  • 另一张表格给出了一组SKU,它们实际上一起出售(即一包SKU)
  • 我想通过识别每张票中的SKU组来转换我的详细票证表,并在可能的情况下,将属于同一包的所有SKU合并为包含ID /名称的1行

这是详细的门票表:

ticket_id   SKU     qty
1           A           1
1           B           2
1           C           1
1           D           1
1           E           1
2           F           1
2           G           2
2           B           1
2           H           2

这是Packs组合表:

group_id    SKU     SKU_qty
A1          A       1
A1          B       2
A1          C       1
A1          D       1
B2          F       1
B2          G       2
B2          B       1

从详细的票证表中,我们可以看到:

  • 故障单1实际上是一个SKU的A1组
  • 票2有B2

因此,将所有包sku合并为1行后得到的表格将给出:

ticket_id   SKU     qty
1           A1          1
1           E           1
2           B2          1
2           H           2

门票可以有其他SKU - 不属于任何包装;同一个SKU可以在多个包装中找到。

有多种语言可供使用(SQL,SAS或R),但是我的第一个"镜头"将尝试SQL。

我真的不知道从哪里开始......提前谢谢

1 个答案:

答案 0 :(得分:1)

您可以尝试以下查询

SELECT ticket_id, 
       case when sku is null then sku1 else group_id end group_id,
       qty
FROM(
    select ticket_id, group_id, g.sku, d.sku sku1, 
           ROW_NUMBER() OVER(PARTITION BY ticket_id) row_num,
           qty
    from detail d 
    left join grouping_ g 
     on d.SKU = g.SKU
    order by ticket_id, D.sku)T1
WHERE sku IS NULL OR row_num = 1;

SQL DEMO

以下是我得到的输出,

enter image description here

希望这会帮助你。