Dynamische Pivot-Abfrage überschreitet die maximale Länge von varchar

stimmen
0

Ich habe versucht, Zeilen zu Spalten in SQL zu konvertieren.

Genau wie dieser:

|*Name*|*Permissions*|
|App1  |Permission 1 |
|App1  |Permission 2 |
|App1  |Permission 3 |
|App2  |Permission 1 |
|App2  |Permission 2 |
|App2  |Permission 3 |

dazu:

|*Name*|*Permission1*|*Permission2*|*Permission3*|
|App1  |Permission 1 |Permission 2 |Permission 3 |
|App2  |Permission 1 |Permission 2 |Permission 3 |

Deshalb habe ich dynamisch zur Erzeugung der Abfrage so etwas wie dieser Code unter Verwendung von

declare @permission_id as VARCHAR(7);
declare @counter as int;
declare @query as VARCHAR(MAX);
declare @name as VARCHAR(15);

set @permission_id = 'permission_';
set @query = 'SELECT a.title, ';
set @counter = 0;

WHILE @counter < 3
BEGIN
    PRINT @counter;
    SET @counter = @counter + 1;
    SET @name = (SELECT CONCAT(@permission_id, @counter));
    SET @query = @query + ' select max(case when seqnum = '
    SET @query = (SELECT CONCAT(@query, @counter))
    SET @query = @query + ' then a.permission end) as '
    SET @query = (SELECT CONCAT(@query, @name))

END

das erzeugt eine Abfrage wie folgt:

select a.name,
       max(case when seqnum = 1 then a.permission end) as permission_1,
       max(case when seqnum = 2 then a.permission end) as permission_2,
       max(case when seqnum = 3 then a.permission end) as permission_3
from (select a.*,
             row_number() over (partition by a.name order by a.name) as seqnum
      from apps a
     ) a
group by a.name;

Das Ergebnis funktioniert gut für bis zu 120 Berechtigungen, denn das ist der Punkt, wo die Abfrage die maximale Länge von varchar überschreitet.

Ich habe keine Lösung für die dynamische Dreh-ing ohne concating eine Abfrage noch nicht, und weder ich fand eine Lösung für eine längere Abfrage gefunden.

Deshalb habe ich diese Frage bin zu fragen.

Gibt es eine Möglichkeit für dynamische Dreh ohne CONCAT-ing eine Abfrage oder gibt es etwas, was ich anstelle von varchar verwenden kann?

Danke!

Veröffentlicht am 09/10/2019 um 18:52
quelle vom benutzer
In anderen Sprachen...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more