您好,我有一个表为列
Cost Rate
Repair 12
Repair 223
Wear 1000
Wear 666
Fuel 500
Repair 600
Fuel 450
Wear 400
现在我想这个数据
Repair Wear Fuel
825 2066 950
使用SQL查询
提前致谢
select sum(case when cost = 'Repair' then rate else null end) as Repair
, sum(case when cost = 'Wear' then rate else null end) as Wear
, sum(case when cost = 'Fuel' then rate else null end) as Fuel
from CostRateTable
在“旋转”你想(做行到列)可以与SQL Server的获得PIVOT操作。
我认为你正在寻找一个方式做动态的枢转或动态交叉表 。
检查这些文章:
- SQLServer的:动态交叉表
- 动态交叉表/透视表
- 交叉表数据透视表工作台
- SQL动态交叉存储过程
您可以使用GROUP BY
使用聚合功能,想什么时候结果组合SUM()
SELECT Cost, SUM(Rate) FROM MyTable GROUP BY Cost
这将返回从你的要求是什么倒的结果,但不应该是一个大问题,我希望。
Cost SUM(Rate)
--- ---
Repair 825
Wear 2066
Fuel 950
你可以用一个简单的交叉表查询做到这一点。 存在这样会引导您完成创建一个访问查询窗口的向导。 只需单击新建查询按钮,然后选择交叉表查询向导。
这是使用一个简单的查询PIVOT
功能。 如果您有已知转换为列的几个值,那么你可以使用一个静态的版本:
create table yourtable
(
cost varchar(10),
rate int
);
insert into yourtable values
('Repair', 12),
('Repair', 223),
('Wear', 1000),
('Wear', 666),
('Fuel', 500),
('Repair', 600),
('Fuel', 450),
('Wear', 400);
select *
from
(
select cost, rate
from yourtable
) x
pivot
(
sum(rate)
for cost in ([Repair], [Wear], [Fuel])
) p;
如果你有一个未知的数值,那么你可以使用动态SQL创建一个动态的支点:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(cost)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT ' + @cols + ' from
(
select cost, rate
from yourtable
) x
pivot
(
sum(rate)
for cost in (' + @cols + ')
) p '
execute(@query)
请参阅SQL拨弄演示 。 双方将产生相同的结果。