By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
5 rows affected
| id1 | id2 | value1_id3=1 | value2_id3=1 | value1_id3=2 | value2_id3=2 | value1_id3=3 | value2_id3=3 |
|---|---|---|---|---|---|---|---|
| 1 | 1 | x11 | x12 | x21 | x22 | null | null |
| 2 | 1 | x31 | x32 | x41 | x42 | x51 | x52 |
SELECT YT.id1,
YT.id2,
MAX(CASE id3 WHEN '1' THEN YT.[value1] END) AS [value1_id3=1],
MAX(CASE id3 WHEN '1' THEN YT.[value2] END) AS [value2_id3=1],
MAX(CASE id3 WHEN '2' THEN YT.[value1] END) AS [value1_id3=2],
MAX(CASE id3 WHEN '2' THEN YT.[value2] END) AS [value2_id3=2],
MAX(CASE id3 WHEN '3' THEN YT.[value1] END) AS [value1_id3=3],
MAX(CASE id3 WHEN '3' THEN YT.[value2] END) AS [value2_id3=3]
FROM dbo.YourTable YT
GROUP BY YT.id1, YT.id2;
Warning: Null value is eliminated by an aggregate or other SET operation.