[英]converting multiple rows to columns in a table
我有一個包含以下行的表:
╔══════════╦═══════════╦════════╗
║ PK_VALUE ║ RATING_ID ║ RATING ║
╠══════════╬═══════════╬════════╣
║ 11 ║ 1 ║ 90 ║
║ 11 ║ 2 ║ 80 ║
║ 11 ║ 3 ║ 90 ║
║ 12 ║ 1 ║ 90 ║
║ 12 ║ 2 ║ 80 ║
║ 12 ║ 3 ║ 90 ║
╚══════════╩═══════════╩════════╝
我想將上表作為:
╔══════════╦════════════╦════════════╦════════════╗
║ PK_VALUE ║ RATING_ID1 ║ RATING_ID2 ║ RATING_ID3 ║
╠══════════╬════════════╬════════════╬════════════╣
║ 11 ║ 90 ║ 80 ║ 90 ║
║ 12 ║ 90 ║ 80 ║ 90 ║
╚══════════╩════════════╩════════════╩════════════╝
我嘗試了一些我在Google搜索中找到的建議,但它顯示我們必須插入表格中。 我不確定這一點。 歡迎任何建議......
I have uploaded the screenshots related to my doubt..
In this image we can see two review ID's for the same pk_value.. But I am receiving only one review ID after including your query..
在上面How can I get result of both the review ID's???
使用CASE
和MAX
SELECT pk_value,
MAX(CASE WHEN rating_ID = 1 THEN rating ELSE NULL END) AS r1,
MAX(CASE WHEN rating_ID = 2 THEN rating ELSE NULL END) AS r2,
MAX(CASE WHEN rating_ID = 3 THEN rating ELSE NULL END) AS r3
FROM tableName
GROUP BY pk_value
否則,如果您具有未知數量的Rating_ID
並且您不希望不斷更新查詢,則建議使用Dynamic SQL
,
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(CASE WHEN rating_ID = ',
rating_id,
' then rating ELSE NULL end) AS `rating_id', rating_id, '`')
) INTO @sql
FROM TableName;
SET @sql = CONCAT('SELECT pk_value, ', @sql, '
FROM tableName
GROUP BY pk_value');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
以上查詢都有相同的結果,
╔══════════╦════════════╦════════════╦════════════╗
║ PK_VALUE ║ RATING_ID1 ║ RATING_ID2 ║ RATING_ID3 ║
╠══════════╬════════════╬════════════╬════════════╣
║ 11 ║ 90 ║ 80 ║ 90 ║
║ 12 ║ 90 ║ 80 ║ 90 ║
╚══════════╩════════════╩════════════╩════════════╝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.