用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
...全文
126 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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,243

社区成员

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

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

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

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