再次提问,复杂动态SQL问题.

tommychim 2007-03-26 12:24:35
假定有两张表:
TABLE A
RowCode SQLString
-----------------------------------------------------------
1000 acct like '72110000%' or acct like '72111900%'
1100 acct Between 72120000 and 72122999
1200 acct In ('72130000','72130005')
....
数据有将近200条记录,SQLString中是对应TABLE B中的条件语句

TABLE B
Acct Amt
-----------------------------------------------------
72110000 100
72111800 200
72111900 300
72120000 400
72128000 500
72130000 600

如何获得如下结果(不要用游标的方式):
RowCode Amt
---------------------------
1000 400 (注释:100+300)
1100 900 (注释:400+500)
1200 600 (注释:600)
...

曾经试过A表通过动态语句用UNION连接起来,但由于数据过多,超过变量允许的最大长度,因此作罢.请教是否有好的方案?
...全文
234 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2007-03-26
  • 打赏
  • 举报
回复
acct like
acct Between
acct In

是不是只有这三个,且格式固定,或许使用case when能搞定.想想.
tommychim 2007-03-26
  • 打赏
  • 举报
回复
就是因为不固定,所以我试过根据每个记录生成动态SQL,然后通过UNION把每个动态SQL连接起来,最后超出变量的长度限制....郁闷.
dawugui 2007-03-26
  • 打赏
  • 举报
回复
SQLString里面的东西不固定,很难搞啊.
tommychim 2007-03-26
  • 打赏
  • 举报
回复
这个项目是要做一张报表,报表的每行或是特定的科目(或组合条件),至于与哪些科目有关,都是用户设置的,因此没办法给出所有的情况.
gc_ding 2007-03-26
  • 打赏
  • 举报
回复
现在用游标取数,存储过程时间太长,要一个小时左右.所以希望能优化一下.
------------------------------------------------------------------
游标贴出来瞧瞧。。。
dawugui 2007-03-26
  • 打赏
  • 举报
回复
曾经试过A表通过动态语句用UNION连接起来,但由于数据过多,超过变量允许的最大长度,因此作罢.请教是否有好的方案?
可否考虑用两个或多个动态SQL连接起来?

另:能否给出所有的的情况.
tommychim 2007-03-26
  • 打赏
  • 举报
回复
有好的建议吗?
tommychim 2007-03-26
  • 打赏
  • 举报
回复
还有"=","NOT LIKE",不过有可能是(between 'a' and 'b') and not like 'c%'之类的,反正条件很复杂,而且我不希望用游标的方式来取数,用游标组合成动态SQL还可以...现在用游标取数,存储过程时间太长,要一个小时左右.所以希望能优化一下.

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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