2

嗨,我有一张表,列为

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

提前致谢

4

7 回答 7

4
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
于 2009-06-26T05:31:35.060 回答
1

可以使用 SQL Server 的PIVOT运算符获得您想要的“旋转”(将行变成列)。

于 2009-06-26T05:40:17.420 回答
1

我认为您正在寻找一种方法来进行Dynamic PivotingDynamic Cross-Tabs

检查这些文章:

于 2009-06-26T05:41:53.393 回答
0

您可以使用简单的交叉表查询来完成此操作。Access Queries 窗口中有一个向导将引导您完成创建一个向导。只需单击 New Query 按钮并选择 Crosstab Query Wizard。

于 2009-07-13T04:13:15.297 回答
0

使用GROUP BY聚合函数(如SUM().

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

这将返回与您请求的结果相反的结果,但我希望这不是什么大问题。

成本总和(费率)
--- ---
维修825
穿2066
燃油 950
于 2009-06-26T05:31:13.890 回答
0

按成本从表名组中选择成本,总和(率)

于 2009-06-26T05:33:22.297 回答
0

这是一个使用该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 Fiddle with Demo。两者都会产生相同的结果。

于 2012-09-21T03:20:17.803 回答