Name
a の最大値は であると述べたので5 Skills
、この問題は静的クエリを使用して実行できます。
-- <<== PART 2
SELECT Name,
MAX(CASE WHEN RowNumber = 1 THEN Skill END) Skill_1,
MAX(CASE WHEN RowNumber = 2 THEN Skill END) Skill_2,
MAX(CASE WHEN RowNumber = 3 THEN Skill END) Skill_3,
MAX(CASE WHEN RowNumber = 4 THEN Skill END) Skill_4,
MAX(CASE WHEN RowNumber = 5 THEN Skill END) Skill_5
FROM
( -- <<== PART 1
SELECT a.Name,
b.Skill,
(
SELECT COUNT(*)
FROM Skill c
WHERE c.id = b.id AND
c.Skill <= b.Skill) AS RowNumber
FROM Name a
INNER JOIN Skill b
ON a.id = b.id
) x
GROUP BY Name
出力
╔══════╦═════════╦═════════╦═════════╦═════════╦═════════╗
║ NAME ║ SKILL_1 ║ SKILL_2 ║ SKILL_3 ║ SKILL_4 ║ SKILL_5 ║
╠══════╬═════════╬═════════╬═════════╬═════════╬═════════╣
║ jon ║ C++ ║ CSS ║ HTML ║ Java ║ JS ║
║ mary ║ Perl ║ PHP ║ Ruby ║ (null) ║ (null) ║
╚══════╩═════════╩═════════╩═════════╩═════════╩═════════╝
簡単な説明
分解してみましょう。クエリには 2 つの部分があります。
クエリの最初の部分であるPART 1Skill
は、 for everyの一連の数値を生成しますName
。サポートされていないウィンドウ関数ROW_NUMBER
を模倣するために、相関サブクエリを使用するだけです。MySQL
2 番目の部分であるPART 2は、 PART 1で生成された連続番号に基づいて、行を列に転置します。CASE
数値の値をテストするために使用し、数値にSkill
関連付けられているを返します。数値が一致しない場合はNULL
値を返します。Name
次に、使用するすべてのグループの列を集計するMAX()
ため、存在する場合SKILL
の代わりに返されNULL
ます。
更新 1
SELECT Name,
MAX(CASE WHEN RowNumber = 1 THEN Skill END) Skill_1,
MAX(CASE WHEN RowNumber = 1 THEN Level END) Level_1,
MAX(CASE WHEN RowNumber = 2 THEN Skill END) Skill_2,
MAX(CASE WHEN RowNumber = 2 THEN Level END) Level_2,
MAX(CASE WHEN RowNumber = 3 THEN Skill END) Skill_3,
MAX(CASE WHEN RowNumber = 3 THEN Level END) Level_3,
MAX(CASE WHEN RowNumber = 4 THEN Skill END) Skill_4,
MAX(CASE WHEN RowNumber = 4 THEN Level END) Level_4,
MAX(CASE WHEN RowNumber = 5 THEN Skill END) Skill_5,
MAX(CASE WHEN RowNumber = 5 THEN Level END) Level_5
FROM
(
SELECT a.Name,
b.Skill,
(
SELECT COUNT(*)
FROM Skill c
WHERE c.id = b.id AND
c.skill <= b.skill) AS RowNumber,
b.Level
FROM Name a
INNER JOIN Skill b
ON a.id = b.id
) x
GROUP BY Name
出力
╔══════╦═════════╦═════════╦═════════╦═════════╦═════════╦═════════╦═════════╦═════════╦═════════╦═════════╗
║ NAME ║ SKILL_1 ║ LEVEL_1 ║ SKILL_2 ║ LEVEL_2 ║ SKILL_3 ║ LEVEL_3 ║ SKILL_4 ║ LEVEL_4 ║ SKILL_5 ║ LEVEL_5 ║
╠══════╬═════════╬═════════╬═════════╬═════════╬═════════╬═════════╬═════════╬═════════╬═════════╬═════════╣
║ jon ║ C++ ║ 3 ║ CSS ║ 4 ║ HTML ║ 5 ║ Java ║ 2 ║ JS ║ 5 ║
║ mary ║ Perl ║ 1 ║ PHP ║ 4 ║ Ruby ║ 3 ║ (null) ║ (null) ║ (null) ║ (null) ║
╚══════╩═════════╩═════════╩═════════╩═════════╩═════════╩═════════╩═════════╩═════════╩═════════╩═════════╝