Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL dynamique pour générer des noms de colonne ?

Après avoir répondu à bon nombre de ces questions au fil des ans en générant un pivot SQL dynamique à partir des métadonnées, jetez un œil à ces exemples :

SQL Dynamic Pivot - comment ordonner les colonnes

Pivot SQL Server 2005 sur un nombre de colonnes inconnu

Quelle requête ou vue SQL affichera des "colonnes dynamiques"

Comment pivoter sur les attributs d'une colonne XML dans T-SQL

Comment appliquer le principe DRY aux instructions SQL qui pivotent les mois

Dans votre cas particulier (en utilisant le pivot ANSI au lieu de la fonction PIVOT de SQL Server 2005) :

DECLARE @template AS varchar(max)
SET @template = 'SELECT 
SKU1
{COLUMN_LIST}
FROM
OrderDetailDeliveryReview
Group By
OrderShipToID,
DeliveryDate,
SKU1
'

DECLARE @column_list AS varchar(max)
SELECT @column_list = COALESCE(@column_list, ',') + 'SUM(Case When Sku2=' + CONVERT(varchar, Sku2) + ' Then Quantity Else 0 End) As [' + CONVERT(varchar, Sku2) + '],' 
FROM OrderDetailDeliveryReview
GROUP BY Sku2
ORDER BY Sku2

Set @column_list = Left(@column_list,Len(@column_list)-1)

SET @template = REPLACE(@template, '{COLUMN_LIST}', @column_list)

EXEC (@template)