2016-03-30 4 views
0

У меня есть таблица, какВ Sybase Показать значения строк как имена столбцов и заполнить эти строки со значениями другого столбца

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 

Мне нужно, чтобы показать его в сетке, как показано ниже

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

I знайте, что концепция PIVOT поможет получить это в MS SQL. Но мне нужно реализовать это в Sybase. Имена полей не фиксированы.

ответ

0

ли 3-полосная автообъединение:

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

Thanks @RobV. Количество полей не фиксировано. Поля могут быть 3 или 4 или 10 или более. – Venu

0

С помощью различных сообщений я понял, что это то, что я могу сделать это, используя динамический оператор случай, как показано ниже.

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) 
Смежные вопросы