J'ai actuellement un tableau avec toutes datatables, en utilisant ces données je veux créer une autre table qui pourrait être utilisée à des fins d'audit (layout similaire à la table pivot)
Exemple ci-dessous:
Données brutes
Name Places Visited ---------------------------- Will London John Toronto Dave New York Will London
Ce que je veux (similaire à Pivot Table mais je peux utiliser des lettres):
Name/Places Visted London Toronto New York Will YNY John NYN Dave NNY
Toute aide pour produire ceci sera très appréciée!
J'espère que je me suis bien expliqué mais laissez-moi savoir si vous souhaitez clarifier quelque chose.
Merci beaucoup!!
Solution pour SQL Server 2005/2008:
DECLARE @Temp TABLE ( Name NVARCHAR(100) NOT NULL ,Place NVARCHAR(100) NOT NULL ); INSERT @Temp SELECT 'Will','London' UNION ALL SELECT 'John','Toronto' UNION ALL SELECT 'Dave','New York' UNION ALL SELECT 'Will','London'; SELECT pvt.Name [Name/Places Visted] ,CASE WHEN [London] IS NOT NULL THEN 'Y' ELSE 'N' END [London] ,CASE WHEN [Toronto] IS NOT NULL THEN 'Y' ELSE 'N' END [Toronto] ,CASE WHEN [New York] IS NOT NULL THEN 'Y' ELSE 'N' END [New York] FROM @Temp src PIVOT( MAX(src.Place) FOR src.Place IN([London], [Toronto], [New York]) ) pvt ORDER BY pvt.Name DESC;
Résultats:
Name/Places Visted London Toronto New York ------------------- ------ ------- -------- Will YNN John NYN Dave NNY
Remarque: Les colonnes résultant de l'opération PIVOT
sont statiques. Cela signifie que si vous ajoutez des loggings avec Place='PARIS'
vous devez modifier la requête comme ceci: PIVOT( MAX(src.Place) FOR src.Place IN([London], [Toronto], [New York], [Paris])
. Ainsi, vous pouvez utiliser l'opérateur PIVOT
si vous avez un nombre limité de villes .