使用SQL查询行列(Rows to Columns using Sql Query)

2019-09-17 01:45发布

您好,我有一个表为列

              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查询

提前致谢

Answer 1:

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


Answer 2:

在“旋转”你想(做行到列)可以与SQL Server的获得PIVOT操作。



Answer 3:

我认为你正在寻找一个方式做动态的枢转动态交叉表

检查这些文章:

  • SQLServer的:动态交叉表
  • 动态交叉表/透视表
  • 交叉表数据透视表工作台
  • SQL动态交叉存储过程


Answer 4:

您可以使用GROUP BY使用聚合功能,想什么时候结果组合SUM()

SELECT Cost, SUM(Rate) FROM MyTable GROUP BY Cost

这将返回从你的要求是什么倒的结果,但不应该是一个大问题,我希望。

Cost     SUM(Rate)
---      ---
Repair   825
Wear     2066
Fuel     950


Answer 5:

选择成本,从表名组和(速率)由成本



Answer 6:

你可以用一个简单的交叉表查询做到这一点。 存在这样会引导您完成创建一个访问查询窗口的向导。 只需单击新建查询按钮,然后选择交叉表查询向导。



Answer 7:

这是使用一个简单的查询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拨弄演示 。 双方将产生相同的结果。



文章来源: Rows to Columns using Sql Query