读书人

这个SELECT 语句如何写

发布时间: 2012-01-24 23:11:54 作者: rapoo

这个SELECT 语句怎么写?
表名:Table1
字段:ID Cusno Price
s012 A 35.02
S012 C 38.6
...................
想得到结果是:
   id Price Price
s012 35.02 38.6
请问这个select 语句怎么写?

[解决办法]
不能在一个查询中存在两个Price吧
[解决办法]
行列转换

declare @sql varchar(8000)
set @sql= ' '
select @sql=@sql+ ',max(case when Cusno= ' ' '+Cusno+ ' ' ' then Price else null end) as [ '+Cusno+ '] '
from table1
group by Cusno

exec( 'select ID '+@sql+ ' from table1 group by ID ')

[解决办法]
create table T(ID nvarchar(10),Cusno nvarchar(10),Price decimal(10,2))
insert T select 's012 ', 'A ', 35.02
union all select 'S012 ', 'C ', 38.6

declare @sql nvarchar(2000)
set @sql= 'select ID, '
select @sql=@sql+ 'Price=sum(case when Cusno= ' ' '+Cusno+ ' ' ' then Price else 0 end), '
from T
group by Cusno
select @sql=left(@sql, len(@sql)-1),@sql=@sql+ ' from T group by ID '
exec(@sql)

--result
ID Price Price
---------- ---------------------------------------- ----------------------------------------
s012 35.02 38.60



[解决办法]
--如果Cusno都是A C的,且Cusno的不是固定的,看看的效果,主是否意

--建境
Create Table Table1
(ID Varchar(10),
Cusno Varchar(10),
Price Numeric(10, 2))
Insert Table1 Select 'S012 ', 'A ', 35.02
Union All Select 'S012 ', 'C ', 38.6
Union All Select 'S013 ', 'A ', 52.00
GO
--
--如果Cusno的是固定的
Select
ID,
SUM(Case Cusno When 'A ' Then Price Else 0.00 End) As PriceA,
SUM(Case Cusno When 'C ' Then Price Else 0.00 End) As PriceC
From
Table1
Group By
ID

--如果Cusno的不是固定的
Declare @S Varchar(8000)
Select @S = 'Select ID '
Select @S = @S + ', SUM(Case Cusno When ' ' ' + Cusno + ' ' ' Then Price Else 0.00 End) As Price '+ Cusno
From Table1 Group By Cusno
Select @S = @S + ' From Table1 Group By ID '
EXEC(@S)
GO
--除境
Drop Table Table1
--果
/*
IDPriceAPriceC
S01235.0238.60
S01352.000.00
*/
[解决办法]
向鱼老大学习,我也写个动态的:

declare @v varchar(1000)
set @v= 'select id '


select @v=@v+ ', '+ 'max(case when cusno = ' ' '+cusno+ ' ' ' then price end ) as price '
from c
set @v=@v+ ' from c group by id '
exec(@v)

读书人网 >SQL Server

热点推荐