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
我有一个不可修改的 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