日期:2014-05-17  浏览次数:20559 次

t-sql数据库开发与结构化程序开发有什么区别?能不用游标改用多重循环实现下面的例子吗?
比如销售企业有几家购买企业,有数据表入下
id   销售企业 购买企业 购买量
1    a            x    10
2    a            y    20
3    b            z    30

希望创建函数,返回字符串

“销售企业a,购买企业x购买量10;购买企业y购买量20;
销售企业b,购买企业z购买量30

我的方法是游标显示销售企业,比如a
    游标while里,每个销售企业显示后,调用函数,显示购买企业及购买量,比如x,10;y,20


有其他办法吗?比如不使用游标,通过循环的办法显示出数据表里的值?


------最佳解决方案--------------------


;with c1(id,   销售企业, 购买企业, 购买量)  -- c1准备数据
as
(
select 1,    'a',            'x',    10 union all
select 2,    'a',            'y',    20 union all
select 3,    'b',            'z',    30
)
,c2 as
(
SELECT  1 groupId,
'销售企业' + 销售企业 + ',' f1,
'购买企业' + 购买企业 f2,
'购买量' + CAST(购买量 AS VARCHAR(10)) f3
from c1
)
SELECT DISTINCT
groupid,
STUFF((select ';'+(f1 + f2 + f3) from c2 where groupid = d.groupId FOR XML PATH('')),1,1,'') result
from c2 d

groupid     result
----------- -----------------------------------------------
1           销售企业a,购买企业x购买量10;销售企业a,购买企业y购买量20;销售企业b,购买企业z购买量30

(1 行受影响)


不知道你是不是要这样的结果集,可把虚视图c2和后面的查询组合到一个函数里面,返回字符串即可……

------其他解决方案--------------------
你这个是字符串合并,不用游标的。字符串合并,自己从网上找吧,很多的
------其他解决方案--------------------
谢谢,的确不用游标。
------其他解决方案--------------------
我还没见到非要用游标才能实现的功能,可能我见识少吧
------其他解决方案--------------------
游标 真不知道什么时候必须用 我老是自己写循环 ,游标的好处 求大神解释...
------其他解决方案--------------------
我就知道在数据库管理方面用游标是可以的,比如遍历所有用户表再做一些处理等。其他的真没试过
------其他解决方案--------------------
我老用游标,其实字符串拼接的时候,能不用就不用,因为很慢的。谢谢!