SQL SERVER – Créer une table en faisant correspondre les lignes et les colonnes et mettre Y ou N

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 .