首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

==帮忙看个Sql,拜托了===

2012-01-11 
帮忙看个Sql,十万火急,拜托了TabletblTest(CityDis不固定)TypeNameCityDisUnitResultA北京1000元1245

==帮忙看个Sql,十万火急,拜托了===
Table   tblTest
    (CityDis   不固定)
      TypeName     CityDis           Unit               Result  
        A                     北京           1000元                 1245
        A                     上海           10000元               548
        B                     北京           1000元                 2134
        B                     上海           10000元               5412
        ..                   ...             .....                   ....

  想得到以下结果

    TypeName               北京                                 上海
          A                       1245(1000元)             548(10000元)
          B                       2134(1000元)               5412(10000元)


拜托各位了.

[解决办法]
--参考

/*-- 数据测试环境 --*/
if exists (select * from dbo.sysobjects where id = object_id(N '[tb] ') and OBJECTPROPERTY(id, N 'IsUserTable ') = 1)
drop table [tb]
GO

create table tb(单位名称 varchar(10),日期 datetime,销售额 int)
insert into tb
select 'A单位 ', '2001-01-01 ',100
union all select 'B单位 ', '2001-01-02 ',101
union all select 'C单位 ', '2001-01-03 ',102
union all select 'D单位 ', '2001-01-04 ',103
union all select 'E单位 ', '2001-01-05 ',104
union all select 'F单位 ', '2001-01-06 ',105
union all select 'G单位 ', '2001-01-07 ',106
union all select 'H单位 ', '2001-01-08 ',107
union all select 'I单位 ', '2001-01-09 ',108
union all select 'J单位 ', '2001-01-11 ',109

/*-- 要求结果
日期 A单位 B单位 C单位 D单位 E单位 F单位 G单位 H单位 I单位 J单位
---------- ----- ----- ----- ----- ----- ----- ---- ---- ---- ------
2001-01-01 100 0 0 0 0 0 0 0 0 0
2001-01-02 0 101 0 0 0 0 0 0 0 0
2001-01-03 0 0 102 0 0 0 0 0 0 0
2001-01-04 0 0 0 103 0 0 0 0 0 0
2001-01-05 0 0 0 0 104 0 0 0 0 0
2001-01-06 0 0 0 0 0 105 0 0 0 0
2001-01-07 0 0 0 0 0 0 106 0 0 0
2001-01-08 0 0 0 0 0 0 0 107 0 0
2001-01-09 0 0 0 0 0 0 0 0 108 0
2001-01-11 0 0 0 0 0 0 0 0 0 109


--*/

/*-- 常规处理方法*/
declare @sql varchar(8000)
set @sql= 'select 日期=convert(varchar(10),日期,120) '
select @sql=@sql+ ',[ '+单位名称
+ ']=sum(case 单位名称 when ' ' '+单位名称+ ' ' ' then 销售额 else 0 end) '
from(select distinct 单位名称 from tb) a
exec(@sql+ ' from tb group by convert(varchar(10),日期,120) ')


[解决办法]
if object_id( 'pubs..tb ') is not null
drop table tb
go

create table tb
(
TypeName varchar(10),
CityDis varchar(10),
Unit varchar(10),
Result int
)

insert into tb(TypeName,CityDis,Unit,Result) values( 'A ', '北京 ', '1000元 ' , '1245 ')
insert into tb(TypeName,CityDis,Unit,Result) values( 'A ', '上海 ', '10000元 ', '548 ')
insert into tb(TypeName,CityDis,Unit,Result) values( 'B ', '北京 ', '1000元 ' , '2134 ')
insert into tb(TypeName,CityDis,Unit,Result) values( 'B ', '上海 ', '10000元 ', '5412 ')

declare @sql varchar(8000)
set @sql = 'select TypeName '
select @sql = @sql + ' , max(case citydis when ' ' ' + citydis + ' ' ' then cast(Result as varchar) + ' '( ' '+ unit + ' ') ' ' end) [ ' + citydis + '] '
from (select distinct citydis from tb) as a
set @sql = @sql + ' from tb group by typename '
exec(@sql)

drop table tb

/*result
TypeName 北京 上海
---------- ------------- -------------
A 1245(1000元) 548(10000元)
B 2134(1000元) 5412(10000元)
*/

热点排行
Bad Request.