1

次の行を含むテーブルがあります。

╔══════════╦═══════════╦════════╗
║ 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???

4

1 に答える 1

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あり、クエリを常に更新したくない場合は、aDynamic 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 ║
╚══════════╩════════════╩════════════╩════════════╝
于 2013-01-22T09:06:37.487 に答える