Упорядочение по SUM(CS_VOL)
не имеет смысла, поскольку вы конвертируете значения в строках в несколько столбцов, и неясно, как будет применяться такой порядок.
Вы можете просто сделать:
SELECT *
FROM FID
PIVOT (
SUM(CS_VOL) FOR CLUSTER_LOG IN ('AS','AEA','HT','PT','AES')
);
Что для ваших тестовых данных:
CREATE TABLE fid ( Client, Cluster_Log, CS_Vol ) AS
SELECT 'A1', 'AS', 23 FROM DUAL UNION ALL
SELECT 'A2', 'AEA', 24 FROM DUAL UNION ALL
SELECT 'A3', 'HT', 48 FROM DUAL UNION ALL
SELECT 'A4', 'PT', 25 FROM DUAL UNION ALL
SELECT 'A4', 'AES', 25 FROM DUAL;
Выходы:
CLIENT | 'AS' | 'AEA' | 'HT' | 'PT' | 'AES'
:----- | ---: | ----: | ---: | ---: | ----:
A2 | <em>null</em> | 24 | <em>null</em> | <em>null</em> | <em>null</em>
A3 | <em>null</em> | <em>null</em> | 48 | <em>null</em> | <em>null</em>
A1 | 23 | <em>null</em> | <em>null</em> | <em>null</em> | <em>null</em>
A4 | <em>null</em> | <em>null</em> | <em>null</em> | 25 | 25
Вам не нужно выражение ORDER BY
в SUM
, так как эти значения будут в столбцах, а не в строках (так как они были предметом PIVOT
). Если вам нужно предложение ORDER BY
, вы можете ORDER BY client
(или один из только что созданных столбцов).
Если вы хотите ORDER BY
, то по всем столбцам просто добавьте значения:
SELECT *
FROM FID
PIVOT (
SUM(CS_VOL) FOR CLUSTER_LOG IN (
'AS' AS "AS",
'AEA' AS AEA,
'HT' AS HT,
'PT' AS PT,
'AES' AS AES
)
)
ORDER BY COALESCE("AS",0)+COALESCE(AEA,0)+COALESCE(HT,0)+COALESCE(PT,0)+COALESCE(AES,0);
Какие выходы:
CLIENT | AS | AEA | HT | PT | AES
:----- | ---: | ---: | ---: | ---: | ---:
A1 | 23 | <em>null</em> | <em>null</em> | <em>null</em> | <em>null</em>
A2 | <em>null</em> | 24 | <em>null</em> | <em>null</em> | <em>null</em>
A3 | <em>null</em> | <em>null</em> | 48 | <em>null</em> | <em>null</em>
A4 | <em>null</em> | <em>null</em> | <em>null</em> | 25 | 25
db <> Fiddle здесь