SQL 服务器 - 以正确格式转置 table 和 return 临时 table

SQL Server - transpose table and return temporary table with correct format

我有一个不可修改的 SQL 事务,其中 return 包含以下数据:

----------------------
| NAME    |   VALUE  |
----------------------
| Amount   |    ...  |
----------------------
| Target   |    ...  |
----------------------
| Date     |    ...  |
----------------------
| Amount   |    ...  |
----------------------
| Target   |    ...  |
----------------------
| Date     |    ...  |
----------------------

例如:

我想将其格式化为:

-----------------------------------------
|   Amount    |   Target    |   Date    |
-----------------------------------------
|    ...      |    ...      |   ...     |
-----------------------------------------

我将如何继续完成这个任务?

我的密码是:

SELECT 
NAME, VALUE
FROM
function(@data)
/* AS PIVOT TABLE(...)*/

我想 return 一个具有正确格式的临时 table。

试试这个,只需使用 select 并将 #foo 替换为您的记录源,并忽略所有设置,除非您只想 运行 这个特定示例。

分组是根据位置进行的,可以使用floor((row_number() over (order by (select 1)) - 1) / 3)得到一个分组每三行。

create table #foo (
Name varchar(50),
StringValue varchar(50))


insert into #foo values ('Amount', '200')
insert into #foo values ('Target', '66')
insert into #foo values ('Date', '2017-1-1')
insert into #foo values ('Amount', '205')
insert into #foo values ('Target', '67')
insert into #foo values ('Date', '2017-3-1')


select 
    max(case when Name = 'Amount' then StringValue else null end) as Amount, 
    max(case when Name = 'Target' then StringValue else null end) as Target, 
    max(case when Name = 'Date' then StringValue else null end) as Date
from (
    select floor((row_number() over (order by (select 1)) - 1) / 3) as group_on, * from #foo 
    ) temp
group by group_on

drop table #foo