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个最大值。难道不是按描述下单吗?