2014-01-28 33 views
0

我們有以下結構(簡化)一packslip線表:MySQL:基於成本比例的子線的價值?

  • line_id(用於packslip線唯一ID)
  • SKU(編號)
  • 重量
  • 值(物品的價值/價格)
  • 成本
  • is_kit(這是一個工具包/父母項目?)
  • parent_line_id(如果它是一個子項,將包含親本的line_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值= 10/(10.0 + 2.49 + 4.29) * 29.99 = $17.87

KITITEM2值= 2.49/(10.0 + 2.49 + 4.29) * 29.99 = $4.45

KITITEM3值= 4.29/(10.0 + 2.49 + 4.29) * 29.99 = $7.67

我能做到這一點在單查詢(可以有嵌套查詢)?怎麼樣?

回答

1

嘗試此查詢,sqlFiddle

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 

查詢留下了一個派生表得到通過SUM(成本)集團分爲由父(母的值)JOIN。
然後,外部查詢將檢查parent_line_id是否爲非空值,並根據派生表中的值乘以成本。

+0

幹得好!我瞭解了另一個我不知道存在的工具(sqlFiddle)。 – Sam

+0

這給了我我需要的東西。謝謝。 – Sam