我有一个包含以下行的表:
╔══════════╦═══════════╦════════╗
║ 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???
答案 0 :(得分:3)
使用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 ║
╚══════════╩════════════╩════════════╩════════════╝