2012-07-09 22 views
5

voglio dividere il singolo risultato colonna da una query in 4 colonne:SQL singola colonna suddiviso su mutiple colonne

sorgente di esempio: (Select [FirstName from User)
Peter
Maria
John
Tina
Carl
Jane
Bill
Sarah

voglio assomigliare a questo:

Column1 Column2 Column3 Column4 
Peter  Mary  John  Tina 
Carl  Jane  Bill  Sarah 

risposta

8

È necessario avere una colonna univoca a ORDER BY per ottenere risultati deterministici ma qualcosa in questo senso dovrebbe funzionare.

;WITH T 
    AS (SELECT [FirstName], 
       (ROW_NUMBER() OVER (ORDER BY (SELECT 0)) - 1)/4 AS Row, 
       (ROW_NUMBER() OVER (ORDER BY (SELECT 0)) - 1) % 4 AS Col 
     FROM [User]) 
SELECT [0] AS Column1, 
     [1] AS Column2, 
     [2] AS Column3, 
     [3] AS Column4 
FROM T PIVOT (MAX(name) FOR Col IN ([0], [1], [2], [3])) P 
ORDER BY Row 
+0

+1, ma penso che row_number() per Col abbia anche bisogno di '-1'. –

+0

Grazie! L'ho fatto funzionare usando 4 tabelle temporanee con moduli diversi e unendomi ai rown, ma il CTE sembra più bello! – callisto

+0

@ NikolaMarkovinović - Vero, o le esigenze di aliasing sono cambiate con output '1,2,3,0,1,2,3,0'. Modificato secondo il tuo suggerimento. –

1

Qui si hanno tonnellate di opzioni, cercare l'uno è più adatto per il vostro caso: Create columns from list of values

collegamento precedente indirizza a even more information

+0

Ho dato un'occhiata al collegamento, ma mostra solo come costruire una singola colonna contenente più valori di righe. Voglio dividere 1 colonna in 4 colonne – callisto

+0

Sì, hai ragione, ho appena modificato la mia risposta, forse dovrebbe essere un commento e non una risposta completa in quanto i link forniti ti danno molte informazioni ma non la risposta esatta al tuo domanda. – Yaroslav

Problemi correlati