select
パーツごとに複雑な式を配置するorder by
か、逆REPLACE(REPLACE(S.NAME,',','-'),'_x','-x')
に選択リストに式を追加する必要があります。
SELECT DISTINCT
AH.NAME||','||
REPLACE(A.ACTIVE_DC,',','/')||','||
REPLACE(A.PASSIVE_DC,',','/')||','||
REPLACE(H.ENVIRONMENT,',','/')||','||
REPLACE(REPLACE(S.NAME,',','-'),'_x','-x')||','||
H.FULL_NAME||','||
H.PRIMARY_IP||','||
H.COMPLIANCE||','||
H.OS
FROM
HOST H
FULL OUTER JOIN
APP_HOST AH ON
AH.ID_2 = H.ID
FULL OUTER JOIN
HOST_SVR HS ON
HS.ID_1 = H.ID
FULL OUTER JOIN
APP A ON
AH.ID_1 = A.ID
FULL OUTER JOIN
SVR S ON
HS.ID_2 = S.ID
WHERE S.NAME IS NOT NULL
ORDER BY
-- same as selected
AH.NAME||','||
REPLACE(A.ACTIVE_DC,',','/')||','||
REPLACE(A.PASSIVE_DC,',','/')||','||
REPLACE(H.ENVIRONMENT,',','/')||','||
REPLACE(REPLACE(S.NAME,',','-'),'_x','-x')||','||
H.FULL_NAME||','||
H.PRIMARY_IP||','||
H.COMPLIANCE||','||
H.OS
上記のクエリは、並べ替え順序が最初のクエリと異なるため、タスクの観点から間違った結果を生成します。
したがって、2番目のオプションを使用してください:
SELECT DISTINCT
AH.NAME||','||
REPLACE(A.ACTIVE_DC,',','/')||','||
REPLACE(A.PASSIVE_DC,',','/')||','||
REPLACE(H.ENVIRONMENT,',','/')||','||
REPLACE(REPLACE(S.NAME,',','-'),'_x','-x')||','||
H.FULL_NAME||','||
H.PRIMARY_IP||','||
H.COMPLIANCE||','||
H.OS,
-- next from order by
AH.NAME_1,
REPLACE(REPLACE(S.NAME,',','-'),'_x','-x'),
H.FULL_NAME
FROM
HOST H
FULL OUTER JOIN
APP_HOST AH ON
AH.ID_2 = H.ID
FULL OUTER JOIN
HOST_SVR HS ON
HS.ID_1 = H.ID
FULL OUTER JOIN
APP A ON
AH.ID_1 = A.ID
FULL OUTER JOIN
SVR S ON
HS.ID_2 = S.ID
WHERE S.NAME IS NOT NULL
ORDER BY
AH.NAME_1,
REPLACE(REPLACE(S.NAME,',','-'),'_x','-x'),
H.FULL_NAME
2 番目のバリアントが機能するのは、すべてのorder by
式が構築された文字列に含まれており、最初のバリアントよりも明確な値を生成できないためです。
ただし、フィールドが 1 つだけの結果セットを生成する場合は、サブクエリを使用して 2 つの手順でそれを行う必要があります。
select
full_string
from (
SELECT DISTINCT
(
AH.NAME||','||
REPLACE(A.ACTIVE_DC,',','/')||','||
REPLACE(A.PASSIVE_DC,',','/')||','||
REPLACE(H.ENVIRONMENT,',','/')||','||
REPLACE(REPLACE(S.NAME,',','-'),'_x','-x')||','||
H.FULL_NAME||','||
H.PRIMARY_IP||','||
H.COMPLIANCE||','||
H.OS
) as full_string,
-- next from order by
AH.NAME_1,
REPLACE(REPLACE(S.NAME,',','-'),'_x','-x') S_NAME_REPLACE,
H.FULL_NAME,
FROM
HOST H
FULL OUTER JOIN
APP_HOST AH ON
AH.ID_2 = H.ID
FULL OUTER JOIN
HOST_SVR HS ON
HS.ID_1 = H.ID
FULL OUTER JOIN
APP A ON
AH.ID_1 = A.ID
FULL OUTER JOIN
SVR S ON
HS.ID_2 = S.ID
WHERE S.NAME IS NOT NULL
)
ORDER BY
NAME_1,
S_NAME_REPLACE,
FULL_NAME
最終クエリに集計式がないため、機能します。
その図は、この SQLFiddleにあります。