用sql写能做到么?

Wendy_123 2006-07-27 09:39:22
表:
字段A 字段B
001 XXX
001 YYY
002 ZZZ
002 HHH
002 GGG
003 FFF

处理成这样的表:
字段A 字段B 字段C 字段D
001 XXX YYY
002 ZZZ HHH GGG
003 FFF
...全文
122 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xray2005 2006-07-27
  • 打赏
  • 举报
回复
LZ注意:我使用的informix的sql,和sql server 2000/2005的sql 语法方面会有出入的.
要注意修改哦!
但是,思路是样的了!
Wendy_123 2006-07-27
  • 打赏
  • 举报
回复
对了,我一定给分, 我先测试一下
xray2005 2006-07-27
  • 打赏
  • 举报
回复
纠正一下:
....
END FOREACH
LET x=x+1 //这样写错了,应该是:[1][1]=001,[1][2]=xxx [1][3]=yyy
LET y=1
END FOREACH
xray2005 2006-07-27
  • 打赏
  • 举报
回复
By the way,记得给分哟!LZ! 嘿嘿......
xray2005 2006-07-27
  • 打赏
  • 举报
回复
以下是我在用informix-4GL写的sql,LZ可以参考以下:

这里的操作可以是定义变量,临时表,数组等等,注意:根据需要定义合适大小的数组和临时表

DECLARE A_cur CURSOR FOR
SELECT DISTINCT A FROM table_name WHERE query_cause //选取所有的字段A
LET x=1
LET y=1
FROEACH A_cur INTO Array[x][y] //foreach是循环取字段A值
DECLARE B_cur CURSOR FOR
SELECT B FROM table_name WHERE 字段A=Array[x][y] //选取字段B
FOREACH B_cur INTO Aarray[x][y] //以[A][B]的形式保存在数组中
LET y=y+1 //使y的值加1,以便保存下一个B的值
END FOREACH
LET x=x+1 //这样[1][1]=xxx,[1][2]=YYY
LET y=1
END FOREACH

接下来的操作可以是:
把数组Array的数据插入到一个临时表,然后在select临时表的数据。
也可以是直接输出Array数组。


出来的形式的应该是:
[1][1] [1][2] [1][3]
001 XXX YYY
[2][1] [2][2] [2][3] [2][4]
002 ZZZ HHH GGG
[3][1] [3][2] [3][3]
003 FFF
zdh001 2006-07-27
  • 打赏
  • 举报
回复
简单
第一步,生成一个值对应表A,如下:
001 XXX 1
001 YYY 2
002 ZZZ 3
002 HHH 4
002 GGG 5
003 FFF 6

第二步,使用CASE转变成以下形式:

字段A 字段B 字段C 字段D
001 1
001 2
002 3
002 4
002 5
003 6

第三步,对第二步的结果使用GROUP BY 字段A,把NULL当作0来对待,如下:
001 1 2 0
002 3 4 5
003 6 0 0
第四步,对第三的结果进行替换,把1,2,3,4,5,6替换成原来的字符串即可
jsyxo 2006-07-27
  • 打赏
  • 举报
回复
先建一个临时表,建成你想要的结果的样式,然后在原表中读数据插入临时表就可以了
leafsword_519 2006-07-27
  • 打赏
  • 举报
回复
可以实现
到网上去搜索表列行互换的例子!
greki 2006-07-27
  • 打赏
  • 举报
回复
写存储过程,,,
想不出sql怎么写
丰云 2006-07-27
  • 打赏
  • 举报
回复
肯定可以做到,只是你的提问太抽象,没法给你代码

62,046

社区成员

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

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

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

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