求一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