Δυναμική ερώτημα Pivot υπερβαίνει το μέγιστο μήκος των varchar

ψήφοι
0

Έχω προσπαθήσει να μετατρέψει γραμμές σε στήλες σε SQL.

Οπως αυτό:

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

σ 'αυτό:

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

Ως εκ τούτου έχω χρησιμοποιήσει κάτι σαν αυτό κώδικα για τη δημιουργία του ερωτήματος δυναμικά

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

η οποία δημιουργεί ένα ερώτημα όπως αυτό:

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;

Το αποτέλεσμα είναι μια χαρά εργάζεται για μέχρι 120 Δικαιώματα, διότι αυτό είναι το σημείο όπου το ερώτημα υπερβαίνει το μέγιστο μήκος των varchar.

Δεν έχω βρει μια λύση για την δυναμική άξονα-σης χωρίς concating ένα ερώτημα ακόμα, και δεν βρήκα μια λύση για μεγαλύτερο ερώτημα.

Γι 'αυτό ζητώ από αυτό το ερώτημα.

Είναι ένας τρόπος για δυναμική άξονα χωρίς CONCAT-σης ένα ερώτημα ή υπάρχει κάτι που μπορώ να χρησιμοποιήσω αντί varchar εκεί;

Σας ευχαριστώ!

Δημοσιεύθηκε 09/10/2019 στις 18:52
πηγή χρήστη
Σε άλλες γλώσσες...                            

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