Простой способ SQL сделать это - использовать MAX()
вместе с CASE
...
SELECT
column1,
column2,
column3,
column4,
MAX(CASE WHEN column5 = 'val1' THEN column6 END) AS val1,
MAX(CASE WHEN column5 = 'val2' THEN column6 END) AS val2,
MAX(CASE WHEN column5 = 'val3' THEN column6 END) AS val3
FROM
yourTable
GROUP BY
column1,
column2,
column3,
column4
В выражениях CASE
, если column5 не совпадает, результат CASE
неявно NULL
.
Затем в MAX()
любые значения NULL
фактически игнорируются.
В результате комбинация выбирает наибольшее значение column6
, где column5
равно val1
/ val2
/ val3
. Предполагая, что существует только одно такое совпадение, оно выбирает одно совпадающее значение.