2012-03-15 3 views
-1

Я пытаюсь написать код sql для создания таблицы, которая является транспонированной данной таблицы. Первоначально у меня есть таблица с данными. Я пытаюсь создать таблицу, которая транспонирует входную таблицу, используя студию управления сервером sql.таблица транспонируется в sql-сервере?

Plz помочь мне ....

вход следующим образом: tbl

выход:

tbltr

ответ

1
+0

Спасибо за быстрый ответ ..... мне не нужно никаких имен столбцов и все ... все Мне нужно просто перенести данные данной таблицы ..... Если это то, что может сделать pivot, вы можете попытаться объяснить мне мою таблицу примеров ... Я новичок в sql – krrish

+0

Переставляя, делайте вы хотите, чтобы вы вращали свой стол? – AFD

+0

Я просто хочу повернуть данные таблицы ... как показано на рисунке i.e, первая строка в исходной таблице - это данные для первого столбца таблицы – krrish

0

Нечто подобное, вероятно, сделать трюк:

Тестовые данные

CREATE TABLE #tbl 
    (
     Y1 INT, 
     Y2 INT, 
     Y3 INT, 
     Y4 INT, 
     Y5 INT 
    ) 

INSERT INTO #tbl 
VALUES 
    (1,2,3,4,9), 
    (1,6,9,3,6), 
    (2,2,6,7,6) 

Тогда нам нужно знать, сколько столбцов X там. Это получает столбцы:

DECLARE @nbrOf INT=(SELECT COUNT(*) FROM #tbl) 

DECLARE @cols VARCHAR(MAX) 
DECLARE @colsWithName VARCHAR(MAX) 

;WITH Nbrs (n) AS (
     SELECT 1 UNION ALL 
     SELECT 1 + n FROM Nbrs WHERE n <@nbrOf) 
SELECT 
    @cols = COALESCE(@cols + ','+QUOTENAME(n), 
        QUOTENAME(n)), 
    @colsWithName = COALESCE(@colsWithName + ','+QUOTENAME(n)+' AS X'+CAST(n AS VARCHAR(10)), 
        QUOTENAME(n)+' AS X'+CAST(n AS VARCHAR(10))) 
FROM 
    Nbrs 

Затем мы собираемся сделать динамический sql с точкой поворота. Как это:

DECLARE @query NVARCHAR(4000)= 
N'SELECT 
    '[email protected]+' 
FROM 
    (
     SELECT 
      ROW_NUMBER() OVER(ORDER BY tbl.Y1) AS RowNbr, 
      tbl.Y1, 
      tbl.Y2, 
      tbl.Y3, 
      tbl.Y4, 
      tbl.Y5 
     FROM 
      #tbl AS tbl 
    ) AS p 
    UNPIVOT 
    (
     Value FOR Name IN 
     (Y1, Y2, Y3, Y4, Y5) 
    ) AS unpvt 
    PIVOT 
    (
     MAX(Value) 
     FOR RowNbr IN('[email protected]+') 
    ) AS pvt' 
EXECUTE(@query) 

Тогда в моем случае я понизит временную таблицу

DROP TABLE #tbl 
+0

Спасибо за ответ, но Я нашел ошибку в вашем решении. если порядок значений столбца «Y1» не возрастает, он не будет работать, потому что он использует функцию ROW_NUMBER() над Y1. – krrish

+0

Это правда. Может быть, у вас есть первичный ключ? Потому что тогда мы можем использовать это в порядке. Нам нужен кто-то, чтобы определить, что является первым и последним значением x. – Arion

Смежные вопросы