2012-03-28 7 views
1

ich habe vier Tabellen wie unten in SQL Server 2008:Wie erstellen dynamische Spalten mit Tabellen Daten in SQL Server 2008?

TABELLE 1 -> Benutzer

     UserID  UserName 
        ----------------------- 
         1    Jhon 

TABELLE 2 -> Tel.buch

     PhonebookID  UserID   Name    MobileNumber 
        ------------------------------------------------------------------- 
         1     1    MyBrother    252848 

TABELLE 3 -> PhonebookExtraField

     PhonebookExtraFieldID  UserID   ExtraFieldName  
        ------------------------------------------------------------- 
          1      1    Age  
          2      1    Job 
          3      1    Address  

TABELLE 4 -> phoneBookExtraFieldData

phoneBookExtraFieldDataID PhonebookExtraFieldID PhonebookID ExtraFieldValue  
----------------------------------------------------------------------------------------- 
     101        1     1    30 
     102        2     1    Web Developer 
     103        3     1    A.V. Rose 

wie kann ich eine Abfrage für die Ausgabe unten schreiben:
meine ich nach einem Weg suchen dynamische Spalten Tabellen Daten für die Erstellung von mit ...

UserName Phonebook(Name) Phonebook(MobileNumber) Age  Job   Address 
------------------------------------------------------------------------------------- 
Jhon   MyBrother   252848   30 Web Developer A.V. Rose 

, was der beste Weg ist zu tun dieser Beruf?
Wie sollte ich meine Tabellen für diesen Zweck ändern?
Dank für die Aufmerksamkeit und Fortschritt ...

Antwort

2

Vielleicht so etwas wie:

Testdaten

CREATE TABLE #User 
(
    UserID INT, 
    UserName VARCHAR(100) 
) 
INSERT INTO #User 
VALUES(1,'Jhon') 
CREATE TABLE #PhoneBook 
(
    PhonebookID INT, 
    UserID INT, 
    Name VARCHAR(100), 
    MobileNumber INT 
) 
INSERT INTO #PhoneBook 
VALUES(1,1,'MyBrother',252848) 
CREATE TABLE #PhonebookExtraField 
(
    PhonebookExtraFieldID INT, 
    UserID INT, 
    ExtraFieldName VARCHAR(100) 
) 
INSERT INTO #PhonebookExtraField 
VALUES(1,1,'Age'),(2,1,'Job'),(3,1,'Address') 
CREATE TABLE #PhoneBookExtraFieldData 
(
    PhoneBookExtraFieldDataID INT, 
    PhonebookExtraFieldID INT, 
    PhonebookID INT, 
    ExtraFieldValue VARCHAR(100) 
) 
INSERT INTO #PhoneBookExtraFieldData 
VALUES(101,1,1,'30'),(102,2,1,'Web Developer'),(103,3,1,'A.V. Rose') 

Das finden die dynamischen Spalten

DECLARE @cols VARCHAR(MAX) 
SELECT @cols = COALESCE(@cols + ','+QUOTENAME(ExtraFieldName), 
        QUOTENAME(ExtraFieldName)) 
FROM 
    #PhonebookExtraField 

Die einige dynamische SQL mit einer Pivot ausführen:

DECLARE @query NVARCHAR(4000)= 
N'SELECT 
    * 
FROM 
(
    SELECT 
     #User.UserName, 
     #PhoneBook.Name AS [Phonebook(Name)], 
     #PhoneBook.MobileNumber AS [Phonebook(MobileNumber)], 
     #PhonebookExtraField.ExtraFieldName, 
     #PhoneBookExtraFieldData.ExtraFieldValue 
    FROM 
     #User 
     JOIN #PhoneBook 
      ON #User.UserID=#PhoneBook.UserID 
     JOIN #PhonebookExtraField 
      ON #PhoneBook.UserID=#PhonebookExtraField.UserID 
     JOIN #PhoneBookExtraFieldData 
      ON #PhonebookExtraField.PhonebookExtraFieldID=#PhoneBookExtraFieldData.PhonebookExtraFieldID 
) AS p 
PIVOT 
(
    MAX(ExtraFieldValue) 
    FOR ExtraFieldName IN('[email protected]+') 
) AS pvt' 
EXECUTE(@query) 

Dann werde ich nach mir selbst aufräumen:

DROP TABLE #User 
DROP TABLE #PhoneBook 
DROP TABLE #PhonebookExtraField 
DROP TABLE #PhoneBookExtraFieldData 
+0

wirklich danke für die Aufmerksamkeit | woh ... Ich denke, es ist genau das, was ich will.Arbeiten Sie darauf ... – MoonLight

+0

Kein Problem ... Wenn Sie mit dieser Antwort in Ordnung sind, dann könnten Sie darüber nachdenken, es zu akzeptieren? – Arion

-1
Select 
    * 
from 
    user as u, 
    PhoneBook as pb, 
    PhonebookExtraField as pbf, 
    phoneBookExtraFieldData as pbdf 
where 
    u.userid=pb.userID 
    and pb.userID=pbf.userID 
    and pbf.PhonebookExtraFieldID =pfbd.PhonebookExtraFieldID 
and u.Username='Jhon' 

* Ersetzen Sie mit den erforderlichen Spaltennamen.

+0

danke für die antwort | aber mit dieser Abfrage haben wir immer noch 3 Zeilen in der Ausgabe anstatt einer. Auch haben wir kein Alter, Job und Adresse als Ausgabe Header! – MoonLight

+0

@SilverLight überprüfen Sie es jetzt habe ich meine Abfrage bearbeitet. –

Verwandte Themen