4

重複の可能性:
複数の子行を 1 つの行に結合する MYSQL

私は次の表を持っています、

count     | inventory_id | resource_id | id
---------+-----------+----------------------
10        | 1            | 1           | 1
20        | 2            | 1           | 2
30        | 1            | 2           | 3
40        | 2            | 2           | 4

resource_id が等しい行をマージし、inventory_id に従って各カウントにエイリアスを付けたいと考えています。カウントのエイリアス「リソース 1」を指定する必要があります。ここでは、inventory_id =1 であり、「リソース 2」は、inventory_id=2 です。

必要な出力:

Resource 1| Resource 2    |resource_id 
---------+-----------+-----------------
10        | 20            | 1             
30        | 40            | 2             
4

2 に答える 2

2

試す

SELECT
  resource_id,
  MAX(CASE WHEN inventory_id = 1 THEN `count` ELSE NULL END) AS 'Resource 1',
  MAX(CASE WHEN inventory_id = 2 THEN `count` ELSE NULL END) AS 'Resource 2'
FROM table1
GROUP BY resource_id

SQLFiddleデモ

inventory_idただし、 (1 and 2)だけでなく、値が不明な場合は、PreparedStatement

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN inventory_id = ',
      inventory_id,
      ' THEN `count` ELSE NULL END) AS ''RESOURCE ',
      inventory_id, ''''
    )
  ) INTO @sql
FROM table1;

SET @sql = CONCAT('SELECT resource_id, ', @sql, ' 
                   FROM table1 
                   GROUP BY resource_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SQLFiddleデモ

于 2012-10-10T15:04:05.367 に答える