我想構建一個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