超级SQL难题(问题方案探讨)

churennan 2003-10-10 07:07:39
sql基本语句:
Select ID,contect From Mytable;
字段说明:
ID为非索引字段,同一ID可能有多个contect

问题:
我现在想将同ID的contect 字段的内容聚合到一个字段中显示,如假设数据库中有如下记录:(001,“SD”),(001,“ER”),
我想将记录以(001,“SD,ER”)显示。不知其是否可通过SQL实现,如果不行,是否可以在PB的DATEWINDW中实现。
...全文
40 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
longdrang 2003-10-12
  • 打赏
  • 举报
回复
用CrossTab報表格式,主窗口顯示id,子窗口顯示id對應的contect.
kenml79 2003-10-12
  • 打赏
  • 举报
回复
使用动态datawindow也可以实现,去具有最多contect的id为datawindow的列数,使得数据按id横向排列,然后再增加最后一列=前面字段的累加(可以用compute)
ID COL1 COL2 SUM(COL)
001 "SD" "ER" "SDER"

然后你只需要id和sum(col),其他的你可以在retrieveend里modify('destroy')掉
coolwei 2003-10-12
  • 打赏
  • 举报
回复
liliang800207(redcloud) 说的不错,容易实现
shinesky 2003-10-12
  • 打赏
  • 举报
回复
用存諸過程是肯定可以的﹐我看樓主的意思是想用一句話搞定﹐這是不可能的。
ishxb 2003-10-12
  • 打赏
  • 举报
回复
up
norrock 2003-10-11
  • 打赏
  • 举报
回复
sql 能实现么!?用存储过程也不怎么方便啊!

关键格式或者3个以上的怎么办!?


强人出来看看!
pbpb 2003-10-11
  • 打赏
  • 举报
回复
进一步的问题,如果类似于矩阵的转置,不是合并连接CONTECT字符串怎么办
hkzhou 2003-10-11
  • 打赏
  • 举报
回复
如果有三行不要显示(001,a,c,v)??
这种动态变化的输出 一句SQL应该无法解决
jdsnhan 2003-10-11
  • 打赏
  • 举报
回复
DW,PROCEDURE,CURSOR都能实现。

想从sql下手。但没写出。
sql中有用transform_pivot进行交叉表查询,应该可以,不过没有环境,无法做测试。
继续关注。
runsoft 2003-10-10
  • 打赏
  • 举报
回复
PB实现比较方便,如果使用PROCEDURE 实现也是可以
klbt 2003-10-10
  • 打赏
  • 举报
回复
用两个数据窗口,或 一个DW + 一个DS 可以实现。

第一个数据窗口只选择ID,按ID排序、分组,并建立一个字符型计算列或计算域aa;
第二个数据窗口(或DS)选择ID,contect,按ID、contect排序、分组。

对第二个数据窗口(或DS)作循环编码,对第一个数据窗口的计算列或计算域aa赋值。
String contect
Long i

for i = 1 to dw_2.RowCount()
connect = connect + dw_2.GetItemString(i, "connect") + ","
next
connect = Left(connect, Len(connect) - 1)
dw_1.SetItem(1, "aa", connect)

没有调试,你试试。
yingmu 2003-10-10
  • 打赏
  • 举报
回复
用存储过程解决啊老兄,这是最简单的了。
liliang800207 2003-10-10
  • 打赏
  • 举报
回复
可以先用一个游标
将相同id下的contect意义检索出来
付给同一字符串变量str
在数据库中建立一个新表包括 id,contect1
在游标检索完后用insert将此数据插入表中

数据窗口依据新建的表重新建立
不需重写sql语句即可
liujiaqiang 2003-10-10
  • 打赏
  • 举报
回复
Datawindow中的实现:
做一个这样的datawindow dw_1 ,在dw_1中加一个 计算列 f_linkcontect(Id)。
select distinct Id from Mytable . //datawindow的select语句。

写一个连接contect字段的全局函数:
函数参数:ai_id
string ls_contect= '' , ls_test

DECLARE cur_test CURSOR FOR
SELECT contect FROM Mytable where id = :ai_id;
fetch cur_test into :ls_test ;
do while sqlca.sqlcode = 0
ls_contect = ls_contect + ls_test
loop

Return ls_contect


这样就可以了,你试试吧。我没测试过。
祝你成功。
liujiaqiang 2003-10-10
  • 打赏
  • 举报
回复
Datawindow中的实现:
做一个这样的datawindow dw_1 ,在dw_1中加一个 计算列 f_linkcontect(Id)。
select distinct Id from Mytable .
在做一个datastroe ds_1 :
Select ID,contect From Mytable where id = :ai_id ; //ai_id 检索参数

写一个连接contect字段的全局函数:
函数参数:ai_id
string ls_contect= '' , ls_test

DECLARE cur_test CURSOR FOR
SELECT contect FROM Mytable where id = :ai_id;
fetch cur_test into :ls_test ;
do while sqlca.sqlcode = 0
ls_contect = ls_contect + ls_test
loop

Return ls_contect


这样就可以了,你试试吧。我没测试过。
祝你成功。

1,108

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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