sql 求救 高手来 我只剩47分了 全送了

symbol_bc 2009-09-22 09:41:18
上次问问题zzxap大哥给解决了,现在又有问题了,

这段代码是以表中相同的一列的值最为新列插入到表的后面,我觉得一般的人不一定看得懂

源代码是这样
declare @Sql nvarchar (4000)
set @Sql = 'select ccuscode,ccusname'
select @Sql = @Sql + ' ,case ccusname when ''' + ccusname + ''' then pubufts end [' + ccusname + ']'
from (select distinct top 50 CCusName from customer) a
set @Sql = @Sql + ' from customer '
print @Sql
print len(@Sql)
exec (@Sql)

现在我要在customer表里再做一个子查询,就改成这样

declare @Sql nvarchar (4000)
set @Sql = 'select ccuscode,ccusname'
select @Sql = @Sql + ' ,case ccusname when ''' + ccusname + ''' then pubufts end [' + ccusname + ']'
from (select distinct top 50 CCusName from (select * from customer) b) a
set @Sql = @Sql + ' from b '
print @Sql
print len(@Sql)
exec (@Sql)

可是提示对象名 b 无效
怎么办
...全文
211 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzxap 2009-09-22
  • 打赏
  • 举报
回复
去掉set @Sql = @Sql + ' from b '
kevinhu520 2009-09-22
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分
LutzMark 2009-09-22
  • 打赏
  • 举报
回复
b是哪来的
还是参考楼上几位的吧
grinzhao 2009-09-22
  • 打赏
  • 举报
回复
from (select distinct top 50 CCusName from (select * from customer) b) a
你把这句改成from (select distinct top 50 CCusName from ((select * from customer) b)) a
试试
因为你那样写的那个b不是指代的你想查询的b
mbh0210 2009-09-22
  • 打赏
  • 举报
回复
这样写没有多大意思,因为你这个b不是实际表也不是临时表或者内存表,
而且在Sql的上下文中还没有处于一级。
你还是在select * from customer一下吧!
游北亮 2009-09-22
  • 打赏
  • 举报
回复
楼主,你不是有Print Sql打印出来吗?
你把打印出来的sql拿去检验一下就知道错误了,按你写的,最后是:
select ccuscode,
ccusname,
case ccusname
when 'ccusname' then
pubufts
end ccusname
from (select distinct top 50 CCusName from (select * from customer) b) a
from b

最后那个from b,是哪个b?
你拼接SQL,要先保证你拼的Sql执行没错,再去拼接
symbol_bc 2009-09-22
  • 打赏
  • 举报
回复
使用cte 是不是要调用什么组件啊,怎么总说我with附近有语法错误呢
play1982 2009-09-22
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分
symbol_bc 2009-09-22
  • 打赏
  • 举报
回复
好,我试试
jiangshun 2009-09-22
  • 打赏
  • 举报
回复
05的

;WITH
b AS(
select * from customer --换成你要的查询
)
declare @Sql nvarchar (4000)
set @Sql = 'select ccuscode,ccusname'
select @Sql = @Sql + ' ,case ccusname when ''' + ccusname + ''' then pubufts end [' + ccusname + ']'
from (select distinct top 50 CCusName from b) a
set @Sql = @Sql + ' from b '
print @Sql
print len(@Sql)
exec (@Sql)
fantapear 2009-09-22
  • 打赏
  • 举报
回复
眼花缭乱 还是帮忙顶下!
symbol_bc 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 jiangshun 的回复:]
引用 15 楼 symbol_bc 的回复:
其实我就是想在set @Sql = @Sql + ' from b '  最后这里,如果能用的上前边查询的结果就好了


或者把子查询放一个临时表中,不过性能吗,,
[/Quote]

如您所说,我原来就是临时表的,这不是想改成sql嘛
symbol_bc 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 jiangshun 的回复:]
引用 9 楼 symbol_bc 的回复:
引用 2 楼 jiangshun 的回复:
把后面的from b中的b换成(select * from customer) b


你的方法我想到了,事实情况是那个子查询select * from customer 其实是一个非常复杂的查询,这样的话岂不是又查了一边,有没有我用再查一遍的方法


楼主数据库是2000的还是05的,要是05的就用CTE


[/Quote]


05的,不过让我查查什么是cte
jiangshun 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 symbol_bc 的回复:]
其实我就是想在set @Sql = @Sql + ' from b ' 最后这里,如果能用的上前边查询的结果就好了
[/Quote]

或者把子查询放一个临时表中,不过性能吗,,
symbol_bc 2009-09-22
  • 打赏
  • 举报
回复
其实我就是想在set @Sql = @Sql + ' from b ' 最后这里,如果能用的上前边查询的结果就好了
jiangshun 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 symbol_bc 的回复:]
引用 2 楼 jiangshun 的回复:
把后面的from b中的b换成(select * from customer) b


你的方法我想到了,事实情况是那个子查询select * from customer 其实是一个非常复杂的查询,这样的话岂不是又查了一边,有没有我用再查一遍的方法
[/Quote]

楼主数据库是2000的还是05的,要是05的就用CTE
symbol_bc 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jiangshun 的回复:]
这个子查询做的有意义吗?
select  distinct top 50 CCusName from (select * from customer) b

select  distinct top 50 CCusName from customer

这两个结果又区别吗?
脱了裤子放屁
[/Quote]

哎,是我表达不清,这是个例子,不是真正的查询,真的查询在子查询这里非常的复杂,我给简化了
xfreyes 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jiangshun 的回复:]
这个子查询做的有意义吗?
select  distinct top 50 CCusName from (select * from customer) b

select  distinct top 50 CCusName from customer

这两个结果又区别吗?
脱了裤子放屁
[/Quote]

虽然是“脱了裤子放屁” 但这里并没有错

错的是后面 :set @Sql = @Sql + ' from b '

你自己都看不懂了,拼这么复杂干吗?

乱。。。
symbol_bc 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 youbl 的回复:]
set @Sql = @Sql + ' from b '
删除就好了
[/Quote]

大哥,不行吧
symbol_bc 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mmm306306 的回复:]
47,最新喜欢的数字,帮顶
[/Quote]

谢了,不过,你怎么会喜欢这个数字,。。。。。。。。。。。。。
加载更多回复(9)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧