SQL dynamique pour générer des noms de colonne?
J'ai une question où je suis en train de pivot des valeurs de ligne dans la colonne des noms et actuellement je suis en utilisant SUM(Case...) As 'ColumnName'
états, comme suit:
SELECT
SKU1,
SUM(Case When Sku2=157 Then Quantity Else 0 End) As '157',
SUM(Case When Sku2=158 Then Quantity Else 0 End) As '158',
SUM(Case When Sku2=167 Then Quantity Else 0 End) As '167'
FROM
OrderDetailDeliveryReview
Group By
OrderShipToID,
DeliveryDate,
SKU1
La requête ci-dessus fonctionne très bien et me donne exactement ce dont j'ai besoin. Cependant, je suis en train d'écrire le SUM(Case...
déclarations la main sur la base des résultats de la requête suivante:
Select Distinct Sku2 From OrderDetailDeliveryReview
Est-il un moyen, à l'aide de T-SQL à l'intérieur d'une procédure stockée, que je peux générer dynamiquement le SUM(Case...
consolidés à partir de la Select Distinct Sku2 From OrderDetailDeliveryReview
requête et ensuite exécuter l'résultant du code SQL?
OriginalL'auteur Ben McCormack | 2010-03-31
Vous devez vous connecter pour publier un commentaire.
Avoir répondu à beaucoup de ceux-ci au fil des ans par la génération dynamique de pivot SQL à partir des métadonnées, jetez un oeil à ces exemples:
SQL Dynamique Pivot - comment l'ordre des colonnes
SQL Server 2005 Pivot sur l'Inconnu Nombre de Colonnes
Quelle requête SQL ou de l'affichage montrera "dynamique des colonnes"
Comment puis-je Pivot sur une colonne XML attributs de l'en T-SQL
Comment appliquer le principe SEC pour SQL qui Pivot Mois
Dans votre cas particulier (à l'aide de la norme ANSI pivot au lieu de SQL Server 2005 PIVOT):
COALESCE
, mais c'est quoi cette fonction?Aussi, Si j'essaie d'exécuter votre requête, j'obtiens une erreur à la Ligne 15: "syntaxe Incorrecte près du mot clé 'DE'." Si je supprime la virgule à la fin de la ligne 14, je puis obtenir un message d'erreur sur ligne 3 qui dit "syntaxe Incorrecte près de 'SOMME'" Aucune idée de ce qui se passe ici ou comment déboguer?
Roux Ok, j'ai modifié le code (mettre la virgule entre les guillemets à la fin de la ligne 14; ajout d'une ligne à couper la virgule hors de @column_list). Maintenant, il fonctionne, ce qui est excellent, mais je ne peux pas comprendre ce qu'il se passe entre les lignes 14 et 17.
McCormack Désolé pour les fautes d'orthographe. FUSIONNER(x, y, z) renvoie la première valeur non NULLE argument. Pour les deux paramètres, c'est essentiellement la même fonction que ISNULL(x, y) (mais c'est plus de la norme ANSI). Le SELECT @var = var @ + quelque chose à partir de la TABLE de SQL Server excentrique chose que vous pouvez faire pour garder juste ajouter du texte à une variable pour faire la liste de colonnes, qui est ensuite simplement inséré dans le modèle.
merci encore pour votre réponse. Alors que j'essayais de comprendre cela, j'ai posté une nouvelle question pour essayer de comprendre ce qui se passe avec l'affectation de variable, mais vous pouvez avoir répondu déjà: stackoverflow.com/questions/2555568/...
OriginalL'auteur Cade Roux
Je sais qu'il y a le moteur de recherche n'est pas parfait, mais votre question a été posée dans SQL Server PIVOT de Données de la Colonne.
Voir aussi La création de la croix de l'onglet requêtes et les tableaux croisés dynamiques dans SQL.
StackOverflow SQL Server Pivot
, j'arrive à Bing le site est bien (bien que les "autres" héritage moteur est bon 😀 trop)Pour info pour ceux qui ne savent pas: j'utilise généralement de Google: "site:stackoverflow.com sql server dynamique de pivot cade roux" pour retrouver toutes mes réponses précédentes sur cette (ou toutes les) rubrique.
OriginalL'auteur van
Pourquoi faire cela en utilisant le codage en dur des noms de colonne lorsque vous pouvez tirer de tout cela de manière dynamique à partir de n'importe quelle table?
À l'aide de UNPIVOT et se rejoignent, je peux dynamiquement tirer une liste de colonnes d'une table et de colonne associé valeurs pour n'importe quel enregistrement dans un dossier d'inscription et de les combiner dans une liste de noms de colonnes avec des valeurs par ligne. Voici le code. Il suffit de le déposer dans votre base de données et le nom de la table. La colonne/table de valeur sera généré pour vous dans SQL Server. Gardez à l'esprit, pour obtenir un partage de la colonne de valeurs pour les colonnes que vous souhaitez convertir en sql de la variante ou des chaînes de texte. Mais un excellent moyen pour obtenir un échantillon de la colonne de la liste de valeurs avec la correspondance des noms de colonne et les types avec nos boucles while ou des curseurs. Son assez rapide:
OriginalL'auteur Mitch Stokely
OriginalL'auteur madhusudan