Хотя я не считаю это возможным ответом, он может дать вам о чем подумать, поскольку он дает конечный результат в sql-сервере.
SELECT
upvt.id
, upvt.name
, left(label,1) AS letter
, CASE
WHEN left(label,1) = 'A' THEN MIN(value)
WHEN left(label,1) = 'B' THEN MAX(value)
END AS [1]
, CASE
WHEN left(label,1) = 'A' THEN MIN(value1)
WHEN left(label,1) = 'B' THEN MAX(value1)
END AS [2]
, CASE
WHEN left(label,1) = 'A' THEN MIN(value2)
WHEN left(label,1) = 'B' THEN MAX(value2)
END AS [3]
FROM example_table
UNPIVOT (
value
FOR label IN (a1,b1)
) upvt
INNER JOIN (
SELECT
id
, name
, left(label1,1) AS letter
, value1
FROM example_table
UNPIVOT (
value1
FOR label1 IN (a2,b2)
) upvt1) as b
ON upvt.id = b.id
AND upvt.name = b.name
INNER JOIN (
SELECT
id
, name
, left(label2,1) AS letter
, value2
FROM example_table
UNPIVOT (
value2
FOR label2 IN (a3,b3)
) upvt2) c
ON upvt.id = c.id
AND upvt.name = c.name
group by upvt.id, upvt.name, upvt.label
Не совсем то, что я назвал бы «готовой продукцией».
Я не планирую использовать 1 2 3, сейчас они просто имена примеров. Я буду бросать свои настоящие имена столбцов на моем конце :) Нет ли способа сделать это более в общем? Получение имен столбцов из Sys cols или что-то еще? Я должен жестко закодировать каждый в утверждение союза ...? – LaurAchnid
Это звучит как новый вопрос для меня. В этом вопросе я (или ответчик с моим общим уровнем знаний) должен знать, какие РСУБД вы используете, и увидеть примеры нескольких экземпляров, которые вы хотите обобщить для своей процедуры. –
Также возможно уместно, связаны ли вы с чистым SQL или можете использовать процедурный язык (PL/SQL, TSQL и т. Д.) Для вашего проекта. –