TSql透视或行到列

TSql透视或行到列,sql,sql-server,tsql,pivot,unpivot,Sql,Sql Server,Tsql,Pivot,Unpivot,我已经看过很多关于Pivot或将行转换为列的文章,但我仍然不太走运,所以我决定发布这个问题 我的桌子是空的 Id列名称 1系列 2数据1 3数据2 我的表行是 Id列的Id值 1 1 1 2 1 2 3 1 3 4 2 25 5 2 26 6 2 27 7 3 28 8 3 29 9 3 30 我希望得到如下结果,我认为使用unpivot或pivot可能有效。结果应该是

我已经看过很多关于Pivot或将行转换为列的文章,但我仍然不太走运,所以我决定发布这个问题

我的桌子是空的

Id列名称
1系列
2数据1
3数据2

我的表

Id列的Id值
1    1      1
2    1      2
3    1      3
4    2      25
5    2      26
6    2      27
7    3      28
8    3      29
9 3 30

我希望得到如下结果,我认为使用unpivot或pivot可能有效。结果应该是这样的-

串行数据1数据2
1        25   28
2        26   29
3        27   30


任何帮助都会有帮助。

我认为
pivot
在这里没有用处。试试这个

WITH cte1
     AS (SELECT Row_number()OVER(ORDER BY Id) RN,
                value            AS Data1
         FROM   yourtable
         WHERE  col_id = 1),
     cte2
     AS (SELECT Row_number()OVER(ORDER BY Id) RN,
                value            AS Data2
         FROM   yourtable
         WHERE  col_id = 2),
     cte3
     AS (SELECT Row_number()OVER(ORDER BY Id) RN,
                value            AS Data3
         FROM   yourtable
         WHERE  col_id = 3)
SELECT Row_number()OVER(ORDER BY a.rn) AS serial,
       Data1,
       Data2,
       Data3
FROM   cte1 A
       FULL OUTER JOIN cte2 B
                    ON a.RN = b.RN
       FULL OUTER JOIN cte3 C
                    ON b.RN = C.RN 

我将指出,您的数据模型需要一些改进,因此我的连接串行的方法是临时的,在实际项目中不可信,因为表之间没有逻辑连接。以下是如何透视数据:

;WITH [rows] AS
(
  SELECT id, value, col_id
  FROM 
    (values
    (1,1,1),(2,1,2),
    (3,1,3),(4,2,25),
    (5,2,26),(6,2,27),
    (7,3,28),(8,3,29),
    (9,3,30)) x(Id, col_id, value)
), cols as
(
  SELECT cols.id, col_name
  FROM
    (values
      ( 2, 'Data1'),( 3, 'Data2')) 
      cols(Id, col_name)
), result as
(
  SELECT row_number() OVER (partition by col_id order by [rows].id) rn, col_name, value
  FROM
    cols
  JOIN
    [rows]
  ON [rows].col_id = cols.id
  WHERE cols.id > 1
)
SELECT rn Serial, Data1, Data2
FROM
  result
PIVOT
(min([value])  
FOR col_name
in([Data1],[Data2])  
)AS p
结果:

Serial Data1 Data2
1      25    28
2      26    29
3      27    30

你能发布你已经尝试过的查询吗?到底是什么链接了这两个表?别忘了接受答案,还有你之前的问题,cols表中的id和rows表中的COLU id(外键)是链接。在这两种情况下,你的完全连接都应该包括CTE1。否则,如果表b没有数据,您将丢失数据。我还将第一次完全连接到左连接Hey fireblade,您的解决方案是正确的,但我认为我需要在列数未知时构建动态sql。