2016-03-30 3 views
0

ich wie eine TabelleIn Sybase zeigen Zeilenwerte als Spaltennamen und füllen Sie diese Zeilen mit den Werten einer anderen Spalte

ID | TableID | FieldNames | Values 
    1 | 1 | FirstName | Value 1  
    2 | 1 | LastName | Value 2  
    3 | 1 | City  | Value 3 
    4 | 2 | FirstName | Value 4  
    5 | 2 | LastName | Value 5  
    6 | 2 | City  | Value 6 

muss ich es in einem Raster zeigen, wie unter

TableID | FirstName | LastName | City 
     1 | Value1 | Value2 | Value3 
     2 | Value4 | Value5 | value6 

I wissen, dass das Konzept PIVOT helfen wird, dies in MS SQL zu implementieren. Aber ich muss das in Sybase implementieren. Feldnamen sind nicht festgelegt.

Antwort

0

einen 3-Wege Sie selbst kommen:

SELECT t1.Value as FirstName, t2.Value as LastName, t3.Value as City 
FROM t t1, t t2, t t3 
WHERE t1.ID + 1 = t2.ID 
AND t1.ID +2 = t3.ID 
+0

Dank @RobV. Anzahl der Felder ist nicht festgelegt. Felder könnten 3 oder 4 oder 10 oder mehr sein. – Venu

0

Mit Hilfe der verschiedenen Beiträge, die ich es herausgefunden habe, dass ich dies mit einer dynamischen Fall Aussage machen kann, wie unten.

DECLARE @query VARCHAR(800) 
    DECLARE @fieldName VARCHAR(255) 
    DECLARE @LoopCounter INT, @MaxCount INT 

    SET @query = 'select f.tableID, ' 
    SET @fieldName = '' 
    SET @LoopCounter = 1 
    SET @MaxCount = (SELECT COUNT(DISTINCT FieldNames) FROM dbo.Table1) 

    WHILE (@LoopCounter <= @MaxCount) 
    BEGIN 

     SET @fieldName = (SELECT FieldNames FROM dbo.table1 WHERE ID= @LoopCounter) 
     SET @query = @query + ' max(case when f.FieldNames = ''' + @fieldName +''' then f.[Values] end) AS ''' + @fieldName + '''' 

     IF(@LoopCounter < @MaxCount) 
     BEGIN 
      SET @query = @query + ', ' 
     END 

     SET @LoopCounter = @LoopCounter + 1 

    END 

    SET @query = @query + ' FROM dbo.table1 f GROUP BY f.TableID' 

    exec (@query) 
Verwandte Themen