[英]MySQL Self Join Table
我有一個名為Inventory
的表,其結構如下:
Location_ID |Item_ID |Stock
1 |A |100
1 |B |500
1 |C |300
2 |A |10
2 |B |20
字段location_ID
和item_ID
是組合鍵。 我想從該單個表中產生以下數據:
Item_ID |Stock_1 |Stock_2
A |100 |10
B |500 |20
C |300 |0
我嘗試編寫幾個自聯接查詢,但是沒有用。 還有另一個問題: location_ID
2上不存在Item_ID
。如果值'0'不存在,如何將其放在結果表上? 頭腦更聰明的人能照亮嗎?
select DIS_ITME_ID,
IFNULL ((select stock
from inventory
where location_id = 1
and item_id = DIS_ITEM_ID), 0) as stock_1,
IFNULL ((select stock
from inventory
where location_id = 2
and item_id = DIS_ITEM_ID), 0) as stock_2
from (select distinct item_ID as DIS_ITEM_ID from inventory)
我知道可能為時已晚,但是有一個更簡單的方法:
SELECT Item_Id,
SUM(
CASE WHEN Location_ID = 1 THEN
Stock
ELSE
0
END) As Stock1,
SUM(
CASE WHEN Location_ID = 2 THEN
Stock
ELSE
0
END) As Stock2
FROM Inventory
GROUP BY Item_Id
您可以使用動態樞紐查詢:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(IF(i.location_ID = ''',
CAST(location_ID as CHAR(50)),
''', i.stock, 0)) AS stock_',
CAST(location_ID as CHAR(50))
)
) INTO @sql
FROM inventory;
SET @sql = CONCAT('SELECT i.item_ID, ', @sql, '
FROM inventory i
GROUP BY i.item_ID');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
您可以在這里找到更多信息: http : //buysql.com/mysql/14-how-to-automate-pivot-tables.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.