gpt4 book ai didi

sql - 从 SQL Server 中的行创建列

转载 作者:行者123 更新时间:2023-12-02 23:22:18 25 4
gpt4 key购买 nike

我有一个 SQL 查询,它以以下格式提供数据;

Total Hours   Year   
100.00 2012
200.00 2012
300.00 2012
75.00 2011
150.00 2011
50.00 2010
125.00 2010

我需要对总小时数进行求和,并将结果集设置为;

2012   2011  2010
600 225 175

请帮帮我!如果您需要更多信息,请告诉我。

最佳答案

您可以使用数据透视表执行此操作,可以是对年份进行硬编码的静态数据透视表,也可以是在运行查询时创建年份列表的动态数据透视表:

静态枢轴:

create table table1
(
totalhours decimal(10, 2),
year int
)

insert into table1 values(100, 2012)
insert into table1 values(200, 2012)
insert into table1 values(300, 2012)
insert into table1 values(75, 2011)
insert into table1 values(150, 2011)
insert into table1 values(50, 2010)
insert into table1 values(125, 2010)

select *
from
(
select *
from table1
) x
pivot
(
sum(totalhours)
for year in ([2012], [2011], [2010])
) p

Here is a SQL Fiddle with an example

动态枢轴:

DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.year)
FROM table1 c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')

set @query = 'SELECT ' + @cols + ' from
(
select totalhours, year
from table1
) x
pivot
(
sum(totalhours)
for year in (' + @cols + ')
) p '


execute(@query)

两者都会给你相同的结果。

关于sql - 从 SQL Server 中的行创建列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10715004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com