SQL 查询的问题
消息1033,级别15,状态1,第7行除非另外还指定了TOP或FORXML,否则,ORDERBY子句在视图、内联函数、派生表、子查询和公用表表达式中无效。SQL2005里...
消息 1033,级别 15,状态 1,第 7 行
除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
SQL2005里面报这个错误
select b.id,b.name,b.logopath,b.description from mct_BCustomer as b
inner join
(select pc.CouponID,pc.PrintCount,pc.LogDate,co.buserID --into temp_CouponBC
from OP_CouponPrintCountStat as pc
inner join OP_Coupon as co on pc.CouponID=co.ID order by printcount desc
) a
on b.id=a.buserID
语句是这样的。 展开
除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
SQL2005里面报这个错误
select b.id,b.name,b.logopath,b.description from mct_BCustomer as b
inner join
(select pc.CouponID,pc.PrintCount,pc.LogDate,co.buserID --into temp_CouponBC
from OP_CouponPrintCountStat as pc
inner join OP_Coupon as co on pc.CouponID=co.ID order by printcount desc
) a
on b.id=a.buserID
语句是这样的。 展开
2个回答
展开全部
很经常我们都要在sql中拼凑字符串,如果需要的评凑的目标字符串的来源都已经在一个表中,那很简单,我们只要写个类似的语句,就可以搞定。
declare @Va1 varchar(500);
set @Va1='';
select @Va1=@Va1+',['+ColumnName+']'
from
ItemColumn
where year=2008
and month=1
order by SortID desc
print @Va1
比如输出为:,[总分],[主题检测],[常规检测],[扣分项],[总体评价],[无推诿],[环境设施],[业务能力],[服务规范]
但是如果我们的数据来源是一个子查询,情况会怎么样呢?
declare @str varchar(500)
set @str=''
--以下写法,会报错
select @str=@str+Value+';'
from
(
select Value,[Order] from dbo.SMS_SpecialConfigData data
join dbo.SMS_Config co
on co.ItemID=data.ConfigID
where Time='2008-5-12' and OrgCode='GZ/'
order by [Order]
)temp
--或如下,但又得不到我们想要的结果
select @str=@str+Value+';'
from
(
select Value,[Order] from dbo.SMS_SpecialConfigData data
join dbo.SMS_Config co
on co.ItemID=data.ConfigID
where Time='2008-5-12' and OrgCode='GZ/'
)temp
order by [Order]
上面的第一个sql,执行会报错,错误如下:
Msg 1033, Level 15, State 1, Line 12
除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
上面的第二个sql,得到的结果有不是我们想要的。
难道我们就束手待毙?不,我们还有表变量。
declare @t table
(
strs varchar(200)
)
declare @str varchar(500)
set @str=''
insert into @t
select Value from dbo.SMS_SpecialConfigData data
join dbo.SMS_Config co
on co.ItemID=data.ConfigID
where Time='2008-5-12' and OrgCode='GZ/'
order by [Order]
select @str=@str+strs+';'
from @t
print @str
ok,讨厌的1033错误消失了,我们要的结果也拿到了。
declare @Va1 varchar(500);
set @Va1='';
select @Va1=@Va1+',['+ColumnName+']'
from
ItemColumn
where year=2008
and month=1
order by SortID desc
print @Va1
比如输出为:,[总分],[主题检测],[常规检测],[扣分项],[总体评价],[无推诿],[环境设施],[业务能力],[服务规范]
但是如果我们的数据来源是一个子查询,情况会怎么样呢?
declare @str varchar(500)
set @str=''
--以下写法,会报错
select @str=@str+Value+';'
from
(
select Value,[Order] from dbo.SMS_SpecialConfigData data
join dbo.SMS_Config co
on co.ItemID=data.ConfigID
where Time='2008-5-12' and OrgCode='GZ/'
order by [Order]
)temp
--或如下,但又得不到我们想要的结果
select @str=@str+Value+';'
from
(
select Value,[Order] from dbo.SMS_SpecialConfigData data
join dbo.SMS_Config co
on co.ItemID=data.ConfigID
where Time='2008-5-12' and OrgCode='GZ/'
)temp
order by [Order]
上面的第一个sql,执行会报错,错误如下:
Msg 1033, Level 15, State 1, Line 12
除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
上面的第二个sql,得到的结果有不是我们想要的。
难道我们就束手待毙?不,我们还有表变量。
declare @t table
(
strs varchar(200)
)
declare @str varchar(500)
set @str=''
insert into @t
select Value from dbo.SMS_SpecialConfigData data
join dbo.SMS_Config co
on co.ItemID=data.ConfigID
where Time='2008-5-12' and OrgCode='GZ/'
order by [Order]
select @str=@str+strs+';'
from @t
print @str
ok,讨厌的1033错误消失了,我们要的结果也拿到了。
展开全部
select b.id,b.name,b.logopath,b.description from mct_BCustomer as b
inner join
(select TOP 100 PERCENT pc.CouponID,pc.PrintCount,pc.LogDate,co.buserID --into temp_CouponBC
from OP_CouponPrintCountStat as pc
inner join OP_Coupon as co on pc.CouponID=co.ID order by printcount desc
) a
on b.id=a.buserID
inner join
(select TOP 100 PERCENT pc.CouponID,pc.PrintCount,pc.LogDate,co.buserID --into temp_CouponBC
from OP_CouponPrintCountStat as pc
inner join OP_Coupon as co on pc.CouponID=co.ID order by printcount desc
) a
on b.id=a.buserID
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询