2010-11-24 7 views
0

j'ai une image de table avec des colonnes comme celui-ci et datalike ceitérative par enregistrements SQL Server 2005 pour formater la sortie

maintenant je dois montrer des données comme celui-ci quand j'exécuter la requête

id maintitle subtitle imagename 
    1 ram  raman  abc.jpg 
    2 manu  kiran  a2.jpg 
    2 manoj  kumar  a3.jpg 
    2 chiru  kumar  a4.jpg 
    3 anu  anitha a4.jpg 
    3 anupam aruna  a4.jpg 

besoin pour vérifier l'ID si elle sort plus d'une ligne qu'il n'existe puis prendre la 2

nom de l'image de la ligne ajouter une nouvelle colonne et affichage comme ici le

besoin sortie comme celui-ci

id maintitle subtitle imagename imagename2 imagename3 
    1 ram  raman  abc.jpg  null  null 
    2 part1  kiran  a2.jpg  a3.jpg  a4.jpg 
    3 anu  anitha a4.jpg  a4.jpg  null 

ex: j'ai une donnée comme celui-ci

INSERT @YourTable VALUES (2,'manu' ,'kiran' ,'a2.jpg') 
INSERT @YourTable VALUES (2,'manoj' ,'kumar' ,'a3.jpg') 
INSERT @YourTable VALUES (2,'chiru' ,'kumar' ,'a4.jpg') 
INSERT @YourTable VALUES (2,'manu' ,'kumar' ,'a5.jpg') 
INSERT @YourTable VALUES (2,'manoj' ,'kumar' ,'a6.jpg') 
INSERT @YourTable VALUES (2,'chiru' ,'kumar' ,'a7.jpg') 

ici, j'ai 6 lignes, donc je dois créer six colonnes. si elle dispose de 4 lignes puis des colonnes devraient être créés espoir dynamiquement ma question est claire

quelqu'un peut-il tel moi comment résoudre ce

toute solution serait génial

+2

Votre résultat ne correspond pas à votre saisie. D'où vient la part1 de votre production? Pourquoi 3 serait * anu * et non * anupam *. Nous pourrions deviner ces choses mais il serait plus facile de le mentionner. –

Répondre

2

vos données d'échantillon ne correspond pas à votre sortie d'échantillon. ce code utilise vos données d'échantillon, essayez ceci:

DECLARE @YourTable table (id int, maintitle varchar(10), subtitle varchar(10), imagename varchar(10)) 
INSERT @YourTable VALUES (1,'ram' ,'raman' ,'abc.jpg') 
INSERT @YourTable VALUES (2,'manu' ,'kiran' ,'a2.jpg') 
INSERT @YourTable VALUES (2,'manoj' ,'kumar' ,'a3.jpg') 
INSERT @YourTable VALUES (2,'chiru' ,'kumar' ,'a4.jpg') 
INSERT @YourTable VALUES (3,'anu' ,'anitha','a4.jpg') 
INSERT @YourTable VALUES (3,'anupam','aruna' ,'a4.jpg') 

;WITH YourTableOrdered AS 
(SELECT 
    *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY id,imagename, maintitle,subtitle) AS RowNumber 
    FROM @YourTable 
) 
SELECT 
    t1.id,t1.maintitle,t1.subtitle,t1.imagename 
     ,t2.imagename AS imagename2 
     ,t3.imagename AS imagename3 
    FROM YourTableOrdered    t1 
     LEFT OUTER JOIN YourTableOrdered t2 ON t1.id=t2.id and t2.RowNumber=2 
     LEFT OUTER JOIN YourTableOrdered t3 ON t1.id=t3.id and t3.RowNumber=3 
    WHERE t1.RowNumber=1 

SORTIE:

id   maintitle subtitle imagename imagename2 imagename3 
----------- ---------- ---------- ---------- ---------- ---------- 
1   ram  raman  abc.jpg NULL  NULL 
2   manu  kiran  a2.jpg  a3.jpg  a4.jpg 
3   anu  anitha  a4.jpg  a4.jpg  NULL 

(3 row(s) affected) 

EDIT basé sur la modification de la question de l'OP mentionner nombre nombre/inconnu de fichiers par id.

vous avez trois options:

1) le code d'une requête fixe avec plus qu'assez LEFT JOINS comme:

;WITH YourTableOrdered AS 
(SELECT 
    *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY id,imagename, maintitle,subtitle) AS RowNumber 
    FROM @YourTable 
) 
SELECT 
    t1.id,t1.maintitle,t1.subtitle,t1.imagename 
     ,t2.imagename AS imagename2 
     ,t3.imagename AS imagename3 
     ,t4.imagename AS imagename4 
     ,t5.imagename AS imagename5 
     ,t6.imagename AS imagename6 
     ,t7.imagename AS imagename7 
     ,t8.imagename AS imagename8 
    FROM YourTableOrdered    t1 
     LEFT OUTER JOIN YourTableOrdered t2 ON t1.id=t2.id and t2.RowNumber=2 
     LEFT OUTER JOIN YourTableOrdered t3 ON t1.id=t3.id and t3.RowNumber=3 
     LEFT OUTER JOIN YourTableOrdered t4 ON t1.id=t4.id and t4.RowNumber=4 
     LEFT OUTER JOIN YourTableOrdered t5 ON t1.id=t5.id and t5.RowNumber=5 
     LEFT OUTER JOIN YourTableOrdered t6 ON t1.id=t6.id and t6.RowNumber=6 
     LEFT OUTER JOIN YourTableOrdered t7 ON t1.id=t7.id and t7.RowNumber=7 
     LEFT OUTER JOIN YourTableOrdered t8 ON t1.id=t8.id and t8.RowNumber=8 
    WHERE t1.RowNumber=1 

2) obtenir le nombre maximum de fichiers par un seul identifiant et puis créez une instruction SQL dynamique contenant ce nombre de jointures. utiliser pour obtenir le nombre maximum de fichiers:

DECLARE @MaxFiles int 
SELECT 
    @MaxFiles=MAX(CountOf) 
    FROM (SELECT 
       id,COUNT(*) AS CountOf 
       FROM @YourTable 
       GROUP BY id 
     ) dt 

3) combiner tous les noms de fichiers dans une liste séparée par des virgules dans une seule colonne, comme:

DECLARE @YourTable table (id int, maintitle varchar(10), subtitle varchar(10), imagename varchar(10)) 
INSERT @YourTable VALUES (1,'ram' ,'raman' ,'abc.jpg') 
INSERT @YourTable VALUES (2,'manu' ,'kiran' ,'a2.jpg') 
INSERT @YourTable VALUES (2,'manoj' ,'kumar' ,'a3.jpg') 
INSERT @YourTable VALUES (2,'chiru' ,'kumar' ,'a4.jpg') 
INSERT @YourTable VALUES (2,'manu' ,'kumar' ,'a5.jpg') 
INSERT @YourTable VALUES (2,'manoj' ,'kumar' ,'a6.jpg') 
INSERT @YourTable VALUES (2,'chiru' ,'kumar' ,'a7.jpg') 
INSERT @YourTable VALUES (3,'anu' ,'anitha','a4.jpg') 
INSERT @YourTable VALUES (3,'anupam','aruna' ,'a4.jpg')  


;WITH YourTableOrdered AS 
(SELECT 
    *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY id,imagename, maintitle,subtitle) AS RowNumber 
    FROM @YourTable 
) 
SELECT 
    t1.id,t1.maintitle,t1.subtitle 
     ,STUFF(
        (SELECT 
         ', ' + t2.imagename 
         FROM @YourTable t2 
         WHERE t2.id=t1.id 
         ORDER BY t2.id,t2.imagename,t2.maintitle,t2.subtitle 
         FOR XML PATH(''), TYPE 
        ).value('.','varchar(max)') 
        ,1,2, '' 
      ) AS imagenames 
    FROM YourTableOrdered t1 
    WHERE t1.RowNumber=1 
    ORDER BY t1.id 

SORTIE:

id   maintitle subtitle imagenames 
----------- ---------- ---------- ------------------------------------------------- 
1   ram  raman  abc.jpg 
2   manu  kiran  a2.jpg, a3.jpg, a4.jpg, a5.jpg, a6.jpg, a7.jpg 
3   anu  anitha  a4.jpg, a4.jpg 

(3 row(s) affected) 
+0

merci pour la relecture j'ai un problème ici les valeurs des lignes pour le même id peut être dynamique donc là je dois créer n nombre de colonnes en fonction de la ligne – happysmile