再问一个复杂的SQL问题,谢谢大家!_MSSQL_编程问答

再问一个复杂的SQL问题,谢谢大家!

来源:互联网  时间:2018/1/23 0:32:53

关于网友提出的“ 再问一个复杂的SQL问题,谢谢大家!”问题疑问,本网通过在网上对“ 再问一个复杂的SQL问题,谢谢大家!”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 再问一个复杂的SQL问题,谢谢大家!

解决方案1:

可以考虑将淘菜的所有子项合并为一个字符串(注意要同样的顺序)
然后再用这个group by
但是你这是sql server 2000. 不仅不支持XML Path,即使是XML RAW也不支持在子语句中
还有很多语句不支持(为什么用这么老的数据库,这就是给自己找麻烦)
另外用转置也可以,但是SQL 2000也不支持
因此可以间接考虑定义一个function处理这种情况


if object_id('menuset') is not null drop table menuset
if object_id('menudetail') is not null drop table menudetail
create table menuset(单号 int,序号 int,套菜名称 nvarchar(100),单价 money,数量 int)
create table menudetail(单号 int,主单序号 int,套菜序号 int,商品 nvarchar(100),单价 money,数量 int)
insert into menuset(单号,序号,套菜名称,单价,数量)
select 1,1,N'1000标准',100,1 union all
select 1,2,N'1000标准',100,1 union all
select 1,3,N'1000标准',100,1 
insert into menudetail(单号,主单序号,套菜序号,商品,单价,数量)
select 1,1,1,N'鱼香肉丝',12,1 union all
select 1,1,2,N'宫保鸡丁',12,1 union all
select 1,2,1,N'鱼香肉丝',12,1 union all
select 1,2,2,N'宫保鸡丁',12,1 union all
select 1,3,1,N'鱼香肉丝',10,1 union all
select 1,3,2,N'宫保鸡丁',12,1 
create function fn_getMenuDetail(@OrderID int,@MenuID int)
RETURNS nvarchar(4000)
AS
begin
   declare @str nvarchar(4000)
   select @str=isnull(@str+N'//','')+商品+','+convert(nvarchar(100),单价)+','+convert(nvarchar(100),数量) from menudetail as md where 单号=@OrderID and 主单序号=@MenuID order by 商品
   return @str
end
select 单号,min(序号) as 序号, 套菜名称,单价,数量,count(0) as [Count] from menuset
group by 单号,套菜名称,单价,数量,dbo.fn_getMenuDetail(单号,序号)

 再问一个复杂的SQL问题,谢谢大家!
  • 一个典型的多表参与连接的复杂SQL调优(SQL TUNING)引发的思考

上一篇关于with(nolock)的小问题
下一篇更新游标当前的数据,始终提示出错。
明星图片
相关文章
《 再问一个复杂的SQL问题,谢谢大家!》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)