Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server-转换表并返回格式正确的临时表_Sql Server_Sql Server 2012_Transpose - Fatal编程技术网

Sql server SQL Server-转换表并返回格式正确的临时表

Sql server SQL Server-转换表并返回格式正确的临时表,sql-server,sql-server-2012,transpose,Sql Server,Sql Server 2012,Transpose,我有一个不可修改的SQL事务,它返回以下数据: ---------------------- | NAME | VALUE | ---------------------- | Amount | ... | ---------------------- | Target | ... | ---------------------- | Date | ... | ---------------------- | Amount | ...

我有一个不可修改的SQL事务,它返回以下数据:

----------------------
| NAME    |   VALUE  |
----------------------
| Amount   |    ...  |
----------------------
| Target   |    ...  |
----------------------
| Date     |    ...  |
----------------------
| Amount   |    ...  |
----------------------
| Target   |    ...  |
----------------------
| Date     |    ...  |
----------------------
e、 g:

我想格式化它,使其看起来像:

-----------------------------------------
|   Amount    |   Target    |   Date    |
-----------------------------------------
|    ...      |    ...      |   ...     |
-----------------------------------------
我将如何继续完成这项工作

我的密码是:

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

我想返回一个具有正确格式的临时表。

尝试此操作,只需使用记录源的select And replace#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

试试这个,只需在记录源中使用select and replace#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


您如何知道哪些金额、目标和日期同时出现?您的示例数据中没有可用于此目的的内容。还有你的示例代码…真的吗?@SeanLange这只是一个转置,所以前3个一起,然后是下3个等等。我明白了。但要做到这一点,你必须有一些东西,你可以使用它们组合在一起或提供订单。你都没有。这里没有pivot专家(根本没有),但也许可以添加一个行号,然后按
楼层(row_num/3)
?@PeterB挑战行号,你需要一个订单。这里没有定义顺序的东西。是的,我认为你所描述的数据一旦被订购就相当接近了。你怎么知道哪些金额、目标和日期一起?您的示例数据中没有可用于此目的的内容。还有你的示例代码…真的吗?@SeanLange这只是一个转置,所以前3个一起,然后是下3个等等。我明白了。但要做到这一点,你必须有一些东西,你可以使用它们组合在一起或提供订单。你都没有。这里没有pivot专家(根本没有),但也许可以添加一个行号,然后按
楼层(row_num/3)
?@PeterB挑战行号,你需要一个订单。这里没有定义顺序的东西。但是,是的,我认为一旦数据被排序,您所描述的就相当接近了。这一直有效,直到order by无法以相同的顺序返回行。我尝试了75个数据点,只要您以正确的顺序输入了所有值,它似乎就可以工作。如果你漏掉了一个值,那么所有的赌注都是无效的。这意味着它以正确的顺序返回数据。但是,由于没有任何东西表明正确的顺序,这将一直工作,直到表足够大,然后突然它将停止正常工作,数据将是错误的。这不是你答案的缺陷,而是桌子设计的缺陷。我昨天给了这个a+1,但需要指出OP在某个时候会出现的问题。如果OP甚至可以在表中添加一个标识列,他们可以将其用作排序列,问题将完全消失。感谢Sean的洞察力,除非实际指定ORDERBY子句,否则不能保证行顺序。一般来说,它会在一定程度上起作用,但如果重新排列磁盘上的数据,将来可能会有不同的顺序。我会说这非常危险。在order by无法以相同的顺序返回行之前,这是有效的。我尝试了75个数据点,只要您以正确的顺序输入了所有值,它似乎就可以工作。如果你漏掉了一个值,那么所有的赌注都是无效的。这意味着它以正确的顺序返回数据。但是,由于没有任何东西表明正确的顺序,这将一直工作,直到表足够大,然后突然它将停止正常工作,数据将是错误的。这不是你答案的缺陷,而是桌子设计的缺陷。我昨天给了这个a+1,但需要指出OP在某个时候会出现的问题。如果OP甚至可以在表中添加一个标识列,他们可以将其用作排序列,问题将完全消失。感谢Sean的洞察力,除非实际指定ORDERBY子句,否则不能保证行顺序。一般来说,它会在一定程度上起作用,但如果重新排列磁盘上的数据,将来可能会有不同的顺序。我觉得很危险。