Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:基于成本比例的子行值?_Mysql_Sql - Fatal编程技术网

MySQL:基于成本比例的子行值?

MySQL:基于成本比例的子行值?,mysql,sql,Mysql,Sql,我们有一个packslip lines表格,其结构如下(简化): 行\u id(packslip行的唯一id) sku(项目#) 名字 重量 价值(项目的价值/价格) 成本 是套件(这是套件/父项吗?) 父项\u行\u id(如果是子项,将包含父项的行\u id) packslip线可以表示单个产品、父套件或套件组件。对于本练习,请使用以下数据集: 1, 'ITEM1', 'Item # 1', 0.3, 9.99, 4.79, 0, null 2, 'KIT1', 'Kit # 1', 1

我们有一个packslip lines表格,其结构如下(简化):

  • 行\u id(packslip行的唯一id)
  • sku(项目#)
  • 名字
  • 重量
  • 价值(项目的价值/价格)
  • 成本
  • 是套件(这是套件/父项吗?)
  • 父项\u行\u id(如果是子项,将包含父项的行\u id)
packslip线可以表示单个产品、父套件或套件组件。对于本练习,请使用以下数据集:

1, 'ITEM1', 'Item # 1', 0.3, 9.99, 4.79, 0, null
2, 'KIT1', 'Kit # 1', 1.3, 29.99, 0, 1, null
3, 'KITITEM1', 'Kit Item # 1', 0.7, 0, 10.0, 0, 2
4, 'KITITEM2', 'Kit Item # 2', 0.3, 0, 2.49, 0, 2
5, 'KITITEM3', 'Kit Item # 3', 0.3, 0, 4.29, 0, 2
正如您希望看到的,
ITEM1
是一种常规/单独的产品,
KIT1
是一种父套件,最后3项是
KIT1
的子组件

请注意,套件缺少成本,套件项缺少价值。我需要创建一个查询,根据项目成本占工具包总成本的比例来计算工具包项目值

所以在这个例子中:

KITITEM1
Value=
10/(10.0+2.49+4.29)*29.99
=
$17.87

KITITEM2
Value=
2.49/(10.0+2.49+4.29)*29.99
=
4.45美元

kitime3
Value=
4.29/(10.0+2.49+4.29)*29.99
=
<7.67美元

我可以在一个查询中完成这一点吗(可以有嵌套查询)?如何查询?

尝试此查询

查询与一个派生表左连接,该派生表将(父项的值)除以该父项的总和(成本)组。

然后外部查询检查父行id是否为空,并将成本乘以派生表中的值。

做得好!我还了解了另一个我不知道存在的工具(SQLFIDLE),这给了我所需要的。非常感谢。
SELECT T1.line_id,
       T1.sku,
       T1.name,
       T1.weight,
       IF (T1.parent_line_id IS NULL,T1.value,
           ROUND(T1.cost * T2.value_divided_by_total_cost,2))as value,
       T1.cost,
       T1.is_kit,
       T1.parent_line_id
FROM packslip T1
LEFT JOIN
   (SELECT parent_line_id,(SELECT value FROM
           packslip p2 WHERE p1.parent_line_id = p2.line_id)
           /SUM(cost)
           as value_divided_by_total_cost
    FROM packslip p1
    WHERE parent_line_id IS NOT NULL
    GROUP BY parent_line_id
    )T2
ON T1.parent_line_id = T2.parent_line_id