Sql 基于其他表信息聚合行

Sql 基于其他表信息聚合行,sql,r,postgresql,sas,Sql,R,Postgresql,Sas,我正在寻找一种使用另一个表中给定的聚合信息重新聚合某些行的方法 我有一张详细信息的表格:带SKU的机票 另一个表给出了实际一起销售的SKU组的组成,即一包SKU 我想通过识别每张票据中的SKU组来转换我的详细票据表,并在可能的情况下,将属于同一个包的所有SKU合并为一行,其中包含该包的id/名称 以下是详细的票务表: ticket_id SKU qty 1 A 1 1 B 2 1 C

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

我有一张详细信息的表格:带SKU的机票 另一个表给出了实际一起销售的SKU组的组成,即一包SKU 我想通过识别每张票据中的SKU组来转换我的详细票据表,并在可能的情况下,将属于同一个包的所有SKU合并为一行,其中包含该包的id/名称 以下是详细的票务表:

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
以下是包装组成表:

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实际上有一组A1 SKU 2号票有B2 因此,将所有包装sku合并到一行后的结果表将给出:

ticket_id   SKU     qty
1           A1          1
1           E           1
2           B2          1
2           H           2
门票可以有其他SKU-不属于任何套餐的一部分;在多个包装中可以找到相同的SKU

SQL、SAS或R可以使用多种语言,但我的第一个选择是尝试SQL


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

您可以尝试下面的查询

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;
下面是我得到的输出


希望这能对您有所帮助。

您的示例数据让我很困惑。很难理解您试图解决的问题,这些表是如何关联的,以及最终的表是如何从其他两个表中派生出来的。你能进一步解释一下你的例子吗?@OliverFrost用附加信息编辑我不知道你是如何从给出的例子中得出这个结论的,但是如果它是正确的,那就太好了!您是否有机会解释一下您的查询的原则,以便理解为什么它似乎有效?