列に行を取得するmySQLクエリを作成しようとしていますが、私は最も近い結果を達成しましたが、まだ必要なものではなく、私は何が欠けている。MySQLの行と列を動的に
SET SESSION group_concat_max_len = 1000000;
SET @sql = NULL;
SET @rank=0;
SELECT
GROUP_CONCAT(
CONCAT(
'MAX(CASE WHEN cpus.hardware_id= ''',
cpus.hardware_id,
''' THEN cpus.type END) AS CPU',@rank:[email protected]+1
)
)INTO @sql
FROM
hardware
LEFT JOIN cpus ON hardware.id = cpus.hardware_id;
SET @sql=CONCAT('SELECT hardware.id, ',@sql,' FROM
hardware
JOIN cpus ON hardware.id = cpus.hardware_id GROUP BY hardware.id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
このクエリの結果は次のとおりです。
|id|CPU1 |CPU2 |CPU3 |
|10|Intel(R) Xeon(R) CPU E5-2407 0 @ 2.20GHz |NULL |NULL |
|11|NULL |Intel(R) Xeon(R) CPU E5530 @ 2.40GHz |Intel(R) Xeon(R) CPU E5530 @ 2.40GHz|
そして、私は達成するために必要な結果は次のとおりです。
|id|CPU1 |CPU2 |
|10|Intel(R) Xeon(R) CPU E5-2407 0 @ 2.20GHz |NULL |
|11|Intel(R) Xeon(R) CPU E5530 @ 2.40GHz |Intel(R) Xeon(R) CPU E5530 @ 2.40GHz |
クエリは、私は複数のCPUを持つことができるため、動的にする必要がありますハードウェアごとに
この上の任意のヘルプは本当に感謝しています。前もって感謝します。
私はCPUとして多くの行を持つことができるので、動的でなければなりません。このサンプルデータの場合、最大CPUは2ですが、CPUが増えている別のハードウェアがある場合は、それらのすべてを返す必要があります。 – vandyk