UNPIVOT
残念ながら、MySQL にはまたは関数はありませんが、forステートメントと集約関数をPIVOT
使用して複製できます。変換する値がわかっている場合は、次のようにハードコーディングできます。UNION ALL
UNPIVOT
CASE
PIVOT
select col code,
sum(case when code = 'xxxx' then value end) xxxx,
sum(case when code = 'xxxx' then value end) yyyy
from
(
select code, A value, 'A' col
from table1
union all
select code, B value, 'B' col
from table1
) x
group by col;
デモで SQL Fiddle を参照してください
しかし、あなたは未知の数のcode
値を持つと述べました。その場合はpivot
、データに対して準備済みステートメントを使用できます。
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(case when code = ''',
code,
''' then value end) AS ',
code
)
) INTO @sql
FROM Table1;
SET @sql = CONCAT('SELECT col as code, ', @sql, '
FROM
(
select code, A value, ''A'' col
from table1
union all
select code, B value, ''B'' col
from table1
) x
GROUP BY col');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SQL Fiddle with Demoを参照してください。
どちらも同じ結果になります。
| CODE | XXXX | YYYY |
----------------------
| A | 50 | 38 |
| B | 63 | 68 |