我有如下表:转换列的结果为单行
Name Rating
Engineering 1
Financials 3
Scope 1
Schedule 2
Risks 3
People 3
我想输出如下:
Engineering Financials Scope Schedule Risks People
1 3 1 2 3 3
只使用SQL查询。有人可以帮助我获得正确的输出吗?
我有如下表:转换列的结果为单行
Name Rating
Engineering 1
Financials 3
Scope 1
Schedule 2
Risks 3
People 3
我想输出如下:
Engineering Financials Scope Schedule Risks People
1 3 1 2 3 3
只使用SQL查询。有人可以帮助我获得正确的输出吗?
您正在尝试PIVOT
的数据。 SQL服务器有一个PIVOT
函数可以为你执行此操作。要执行PIVOT
,您需要确定要使用的聚合函数。在我的示例中,我使用MAX()
但你可以用SUM()
等
如果没有旋转功能,那么你可以可以使用聚合函数与CASE
语句来做到这一点。
集合/ CASE版本:此版本要求您将所有名称硬编码到列中。
select
max(case when name = 'Engineering' then rating end) Engineering,
max(case when name = 'Financials' then rating end) Financials,
max(case when name = 'Scope' then rating end) Scope,
max(case when name = 'Schedule' then rating end) Schedule,
max(case when name = 'Risks' then rating end) Risks,
max(case when name = 'People' then rating end) People
from yourtable
静态PIVOT版本:您将硬盘的名称的值的代码到这个查询
select *
from
(
select name, rating
from yourtable
) src
pivot
(
max(rating)
for name in ([Engineering], [Financials], [Scope],
[Schedule], [Risks], [People])
) piv
以上版本一起巨大的,如果你有一个已知数量的列,但是如果你的值为name
重新未知,那么你可以使用动态sql来获取数据。
动态PIVOT版本:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Name)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT ' + @cols + ' from
(
select name, rating
from yourtable
) x
pivot
(
max(rating)
for name in (' + @cols + ')
) p '
execute(@query)
所有三个版本都会产生相同的结果:
| ENGINEERING | FINANCIALS | SCOPE | SCHEDULE | RISKS | PEOPLE |
----------------------------------------------------------------
| 1 | 3 | 1 | 2 | 3 | 3 |
你的问题不明确。其实,这不是一个问题。 – woz
你有什么尝试?这是一个问题和答案网站,而不是*我的代码为我的网站*。 – Matt
@woz:什么是回滚? – Matt