簡體   English   中英

MySQL自連接表

[英]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_IDitem_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

sqlfiddle

您可以使用動態樞紐查詢:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM