Sql server 将行/轴转置到列

Sql server 将行/轴转置到列,sql-server,tsql,pivot,transpose,Sql Server,Tsql,Pivot,Transpose,我正试着把一张桌子调换位置。这是我当前的设置。 当前表格: ID | Value 1 | 10 1 | 11 1 | 12 1 | 13 1 | 14 2 | 123 3 | 13423 3 | 1134 3 | 1234 寻求以下结果: ID | Value01 | Value 02 | Value 03 | Value 04 | Value 05 1 | 10 | 11 | 12 | 13 | 14 2 | 123 3

我正试着把一张桌子调换位置。这是我当前的设置。
当前表格:

ID | Value
1  | 10
1  | 11
1  | 12
1  | 13
1  | 14
2  | 123
3  | 13423
3  | 1134
3  | 1234
寻求以下结果:

ID | Value01 | Value 02 | Value 03 | Value 04 | Value 05
1  |  10     |  11      |   12     |   13     |  14
2  |  123
3  | 13423   | 1134     | 1234
目前我正在尝试使用
PIVOT
,但是我不完全确定如何在没有“分类列”(例如天或月)的情况下
PIVOT
。我可以使用
ID
列进行此操作吗

SELECT ID, Value, [0], [1], [2], [3], [4] 
FROM (
      SELECT ID, Value FROM dbo.TABLE
) SourceTable 
PIVOT (
      VALUE FOR ID IN ([0], [1], [2], [3], [4])
) AS PivotTable

每个
ID
没有预设的
值量。但是,如果需要有一个已知的数字,那么5个值(因此5列)就足够了。

您当前的查询已结束,您缺少作为新列名的值。我的建议是使用
row_number()
,它将在每个
id
上创建一个递增的值,然后您可以使用PIVOT函数为每个序列值返回
max(value)

SELECT ID, [0], [1], [2], [3], [4] 
FROM 
(
  SELECT ID, Value, 
    row_number() over(partition by id 
                        order by id) -1  seq
  FROM yourtable
) SourceTable 
PIVOT 
(
  max(VALUE)
  FOR seq IN ([0], [1], [2], [3], [4])
) AS PivotTable;

请参见

如果当前查询已关闭,则缺少作为新列名的值。我的建议是使用
row_number()
,它将在每个
id
上创建一个递增的值,然后您可以使用PIVOT函数为每个序列值返回
max(value)

SELECT ID, [0], [1], [2], [3], [4] 
FROM 
(
  SELECT ID, Value, 
    row_number() over(partition by id 
                        order by id) -1  seq
  FROM yourtable
) SourceTable 
PIVOT 
(
  max(VALUE)
  FOR seq IN ([0], [1], [2], [3], [4])
) AS PivotTable;

请参见

+1请注意,如果没有要排序的附加列,则每列中值的位置可能与问题中所示的垂直方向不匹配。还有住宿万岁!:-)非常感谢。我在
行编号()处添加了
desc
。。order by.
感谢Aaron的评论,方向不需要匹配(问题中纯粹是巧合);只要选择了最大5个值。@Ben ok,但也要注意,我们不知道“最大5”是什么意思,如果您有6个值,则无法保证包含哪5个值。将
ORDER BY
更改为
ORDER BY DESC
不会改变这一点。使用“max 5”,我的意思是从值列表中选择5个最大值。
ORDER BY DESC
是否强制执行此操作?+1请注意,如果没有额外的列进行排序,则每列中值的位置可能与问题中所示的垂直方向不匹配。还有住宿万岁!:-)非常感谢。我在
行编号()处添加了
desc
。。order by.
感谢Aaron的评论,方向不需要匹配(问题中纯粹是巧合);只要选择了最大5个值。@Ben ok,但也要注意,我们不知道“最大5”是什么意思,如果您有6个值,则无法保证包含哪5个值。将
ORDER BY
更改为
ORDER BY DESC
不会改变这一点。使用“max 5”,我的意思是从值列表中选择5个最大值。难道不是按描述下单吗?