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

求一sql语句,想了一天没想出来,该如何处理

2012-02-29 
求一sql语句,想了一天没想出来表结构:------表客房id客房类型id客房类型价格11标准房10021豪华30031总统套

求一sql语句,想了一天没想出来
表结构:
------
表客房
id   客房类型id     客房类型   价格
1       1                       标准房     100
2       1                       豪华         300
3       1                       总统套房   10000
--------------------------------
create   table   宾馆_客房
(客房id   int   not   null,
客房类型   nvarchar(20)   null,
价格   nvarchar(20)   null)
------
表   宾馆
id   客房类型id   效果图     配套设施   服务   简介
1           1                   37           dongxi     fuwu     jianjie
2           2                     2           null           null     null
-----------------------------------------
create   table   宾馆
(id   int   not   null,
客房类型id   int   not   null,
效果图   int   null
配套设施   nvarchar(200)   null,
服务   nvarchar(100)   null,
简介   nvarchar(8000)   null)

结果:
id           客房类型                               价格               效果图     配套设施   服务   简介
1       标准房   豪华   总统套房   100   300   10000           37           ................      

用一个select   语句。



[解决办法]
一条语句解决问题比较困难;
如果有辅助参数还差不多。
[解决办法]
游标可以
[解决办法]
--字符串的合并需要写个函数!

create function roy(@i int)
returns varchar(4000)
as
begin
declare @v varchar(400),@s varchar(400)
set @v= ' '
set @s= ' '
select @v=@v+客房类型+ ', ',@s=@s+rtrim(价格)+ ', ' from 宾馆_客房
where 客房类型id=@i
set @v=left(@v,len(@v)-1)
set @s=left(@s,len(@s)-1)
return @v+ ' ' +@s
end

select dbo.roy(a.客房类型id) from 宾馆_客房 a,宾馆 b
where a.客房类型id=b.客房类型id

[解决办法]
--try
create table 宾馆_客房
(id int not null,
客房类型id int not null,
客房类型 nvarchar(20) null,
价格 nvarchar(20) null)
insert into 宾馆_客房 select 1,1, '标准房 ', '100 '
union all select 2,1, '豪华房间 ', '300 '
union all select 3,1, '总统套房 ', '10000 '
--
create table 宾馆
(id int not null,
客房类型id int not null,
效果图 int null,
配套设施 nvarchar(200) null,
服务 nvarchar(100) null,
简介 nvarchar(4000) null)
insert into 宾馆 select 1, 1 ,37, 'dongxi ', 'fuwu ', 'jianjie '
union all
select 2,2,2, null , null , null

/*
id 客房类型 价格 效果图 配套设施 服务 简介
1 标准房 豪华 总统套房 100 300 10000 37 ................ */
go
create function dbo.f1(@id int,@col int)


returns varchar(4000)
as
begin
declare @re varchar(4000)
set @re= ' '
if @col=1
select @re=@re+ ' '+客房类型 from 宾馆_客房 where 客房类型id=@id
if @col=2
select @re=@re+ ' '+cast(价格 as varchar) from 宾馆_客房 where 客房类型id=@id

return stuff(@re,1,1, ' ')
end
go
select id,客房类型=dbo.f1(客房类型id,1),价格=dbo.f1(客房类型id,2)
,效果图,配套设施, 服务, 简介 from 宾馆 where dbo.f1(客房类型id,1) is not null
drop table 宾馆,宾馆_客房
drop function dbo.f1
[解决办法]
写函数
[解决办法]
select x.客房类型id,x.客房类型,x.价格,y.效果图,y.配套设施,y.服务,y.简介 from
(select 客房类型id,
max((case when [id] = '1 ' then isnull(客房类型, ' ') else ' ' end)) +
max((case when [id] = '2 ' then isnull(客房类型, ' ') else ' ' end)) +
max((case when [id] = '3 ' then isnull(客房类型, ' ') else ' ' end)) as 客房类型,
max((case when [id] = '1 ' then isnull(价格, ' ') else ' ' end)) +
max((case when [id] = '2 ' then isnull(价格, ' ') else ' ' end)) +
max((case when [id] = '3 ' then isnull(价格, ' ') else ' ' end)) as 价格
from宾馆_客房
group by 客房类型id ) x,
宾馆 y
where x.客房类型id = y.客房类型id
----------------------------
结果:
----------------------------
1 标准房豪华房间 总统套房1003001000037dongxifuwujianjie

热点排行