2009-05-22 6 views
2

J'ai une table avec 5 colonnes, quelle est la manière la plus simple de sélectionner toutes les lignes, mais où chaque colonne est randomisée individuellement?Comment sélectionner des colonnes de la table dans un ordre aléatoire dans TSQL

Tout ce que je peux penser est de sélectionner séparément chaque colonne, ainsi que

row_number over (order by newid()) as lookup 

puis rejoindre chaque colonne de retour ensemble sur recherche.

Existe-t-il un moyen plus simple?

Merci

Répondre

3

Vous pouvez préparer 5 ensembles et PIVOT leur a ordonné:

SELECT * 
FROM (
     SELECT 'col1' AS name, col1 AS col, ROW_NUMBER() OVER (ORDER BY NEWID()) AS rn 
     FROM table 
     UNION ALL 
     SELECT 'col2', col2, ROW_NUMBER() OVER (ORDER BY NEWID()) 
     FROM table 
     UNION ALL 
     SELECT 'col3', col3, ROW_NUMBER() OVER (ORDER BY NEWID()) 
     FROM table 
     UNION ALL 
     SELECT 'col4', col4, ROW_NUMBER() OVER (ORDER BY NEWID()) 
     FROM table 
     UNION ALL 
     SELECT 'col5', col5, ROW_NUMBER() OVER (ORDER BY NEWID()) 
     FROM table 
     ) q 
PIVOT (
     MIN(col) 
     FOR name IN ([col1], [col2], [col3], [col4], [col5]) 
     ) pt 

Voir cette entrée dans mon blog pour plus de détails:

4

Non, c'est à peu près tout. Je suppose que vous voulez un ordre de rang aléatoire par colonne (pas toutes les colonnes de la même rangée aléatoire).

SQL étant basé sur une ligne, vous devez séparer 5 colonnes pour chaque colonne (pour la ligne aléatoire par colonne), puis utiliser la ligne arbitraire pour joindre les résultats.

Un problème intéressant ...

Questions connexes