Ich bin irgendwie fest. Ich möchte ein Benutzer-Rollen-Beziehung-Pivot-Tabelle zu tun, und meine Frage so sieht weit wie folgt aus:Dynamic Oracle Pivot_In_Clause
WITH PIVOT_DATA AS (
SELECT *
FROM
(
SELECT USERNAME, GRANTED_ROLE
FROM [email protected]_LINK U LEFT OUTER JOIN [email protected]_LINK R
ON U.USERNAME = R.GRANTEE
)
)
SELECT *
FROM PIVOT_DATA
PIVOT
(
COUNT(GRANTED_ROLE)
FOR GRANTED_ROLE
IN('CONNECT') -- Just an example
)
ORDER BY USERNAME ASC;
Es funktioniert wirklich gut und macht den Job, aber ich will keine Rolle, die ich zu schreiben, schreiben wollen in der pivot_in_clause
suchen, weil wir wie Tonnen von ihnen bekommen haben und ich nicht jedes Mal überprüfen möchte, ob es irgendwelche Änderungen gibt.
Also gibt es eine Möglichkeit, eine SELECT
in der pivot_in_clause
zu schreiben? Ich habe versucht, es selbst:
[...]
PIVOT
(
COUNT(GRANTED_ROLE)
FOR GRANTED_ROLE
IN(SELECT ROLE FROM [email protected]_LINK)
)
[...]
Aber es gibt mir immer ein ORA-00936: „missing Ausdruck“ in Zeile 1 der gesamten Abfrage und ich weiß nicht, warum. Kann es nicht eine SELECT
in der pivot_in_clause
oder mache ich es falsch?
Die Problem mit Ihrem Wunsch ist, dass die Anzahl der Spalten des Ergebnisses unvorhersehbar/variabel ist. –
@FlorinGhita: Ja, ich muss dieses Skript auf 5 verschiedenen Datenbankinstanzen ausführen und die Anzahl der Rollen ist unterschiedlich. Deshalb wollte ich eine "dynamische" Version dieses Skripts haben. –
Sie können PIVOT XML verwenden und dann (any) als Ihre Klausel verwenden. Der Nachteil ist, dass es dann an Ihrem Client liegt, das XML zu parsen. – dazedandconfused