2010-11-24 8 views
0

ich so eine Tabelle Bilder mit Spalten zu formatieren und datalike dieseriterative durch die Datensätze in SQL Server 2005 die Ausgabe

jetzt brauche ich Daten wie diese zeigen, wenn ich die Abfrage

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 

Notwendigkeit laufen die ID zu überprüfen, ob es mehr als eine Zeile verläßt er es dann Namen, um die 2

Zeile Bild nehmen existiert eine neue Spalte hinzufügen und die

Notwendigkeit wie dies hier angezeigt werden Ausgabe wie dies

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: Ich habe ein Daten wie diese

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') 

hier ich habe 6 Reihen, so dass ich sechs Spalten erstellen habe. wenn es 4 Reihen hat dann für Spalten sollten dynamisch erstellt werden hoffen, dass meine Frage klar ist

kann jemand tel mir, wie diese

jede Lösung wäre toll

+2

Ihre Ausgabe stimmt nicht mit Ihrer Eingabe überein. Woher kommt Part1 in deiner Ausgabe? Warum sollte 3 * anu * und nicht * anupam * sein? Wir könnten diese Dinge erraten, aber es wäre einfacher, es nur zu erwähnen. –

Antwort

2

Ihre Beispieldaten zu lösen, ist nicht im Einklang mit Ihre Beispielausgabe. Dieser Code verwendet Ihre Datenprobe, versuchen Sie dies:

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 

OUTPUT:

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 basierend auf OP Frage bearbeiten viele/unbekannte Anzahl von Dateien pro-ID zu erwähnen.

Sie haben drei Möglichkeiten:

1) Code eine feste Abfrage mit mehr als genug LEFT JOINS wie:

;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) die maximale Anzahl von Dateien pro einer einzigen ID erhalten und Erstellen Sie dann eine dynamische SQL-Anweisung, die die Anzahl der Joins enthält. Hier können Sie die maximale Anzahl von Dateien erhalten:

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

3) vereinen alle Dateinamen in eine durch Kommata getrennte Liste in einer Spalte, wie:

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 

OUTPUT:

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

danke für die Wiederholung Ich habe ein Problem hier die Zeilen Werte für die gleiche ID kann dynamisch sein, so dass ich n Anzahl der Spalten basierend auf der Zeile erstellen müssen – happysmile