12 个解决方案
#1
行转列的功能!
网上的例子很多!
http://cosio.itpub.net!
网上的例子很多!
http://cosio.itpub.net!
#2
http://topic.csdn.net/u/20090408/15/275bb681-0f03-422e-9af2-4d924969f0ff.html
#3
10G
select wmsys.wm_concat(name) from yourtable
#4
LS的ORACLE专有函数肯定也不能用的,LZ要考虑的是Oracle和MySQL数据库无缝移植
#5
排行榜第一和第三都回答你了,我没有什么好说的了
#6
有啥说的,就这样了
#7
SQL> select t.* from test_row_cell t;
ID NAME
---------- --------------------
1 A
2 B
3 C
4 D
5 E
6 F
1 B
1 C
4 A
4 B
4 C
11 rows selected
SQL>
SQL> SELECT id, str
2 FROM (SELECT id,
3 row_number() over(PARTITION BY id ORDER BY name) AS rn,
4 name || lead(',' || name, 1) over(PARTITION BY id ORDER BY name) || lead(',' || name, 2) over(PARTITION BY id ORDER BY name) || lead(',' || name, 3) over(PARTITION BY id ORDER BY name) AS str
5 FROM test_row_cell)
6 WHERE rn = 1
7 ORDER BY 1;
ID STR
---------- --------------------------------------------------------------------------------
1 A,B,C
2 B
3 C
4 A,B,C,D
5 E
6 F
6 rows selected
ID NAME
---------- --------------------
1 A
2 B
3 C
4 D
5 E
6 F
1 B
1 C
4 A
4 B
4 C
11 rows selected
SQL>
SQL> SELECT id, str
2 FROM (SELECT id,
3 row_number() over(PARTITION BY id ORDER BY name) AS rn,
4 name || lead(',' || name, 1) over(PARTITION BY id ORDER BY name) || lead(',' || name, 2) over(PARTITION BY id ORDER BY name) || lead(',' || name, 3) over(PARTITION BY id ORDER BY name) AS str
5 FROM test_row_cell)
6 WHERE rn = 1
7 ORDER BY 1;
ID STR
---------- --------------------------------------------------------------------------------
1 A,B,C
2 B
3 C
4 A,B,C,D
5 E
6 F
6 rows selected
#8
谢谢大家的的回复!! 虽然现在暂时只看懂了3楼的语句. 不过啊... 嗯... 7楼的虽然还没看名白但是... 这个确实也可以在MySQL下执行么? 3楼的应该是只能在Oracle下执行吧 (也没关系, 先运行起来再说). 嗯... 反正现在就是查到了3个名字, 比如: "select NAME from EMP where SALARY = 1000"; 那么如果只针对这句话的话, 除了用Oracle专用的函数外, 要怎么修改才可以实现把3个名字组成一个字符串呢? 谢谢!!
#9
lz可以考虑把数据在oracle里处理好了之后,存到临时表里,在移植过去,不一定非要直接移植的时候处理。除了oracle专用函数外,估计只能用存储过程了。
#10
哦,mysql好像不能用row_number 。。
很多oracle特有的函数都不能用,又不给用存储过程,这个。。
很多oracle特有的函数都不能用,又不给用存储过程,这个。。
#11
感兴趣,继续。
#12
这种需求想要做到无缝移植,就会写得很麻烦
单ORACLE有比较简单的方法如三楼的
单ORACLE有比较简单的方法如三楼的
#1
行转列的功能!
网上的例子很多!
http://cosio.itpub.net!
网上的例子很多!
http://cosio.itpub.net!
#2
http://topic.csdn.net/u/20090408/15/275bb681-0f03-422e-9af2-4d924969f0ff.html
#3
10G
select wmsys.wm_concat(name) from yourtable
#4
LS的ORACLE专有函数肯定也不能用的,LZ要考虑的是Oracle和MySQL数据库无缝移植
#5
排行榜第一和第三都回答你了,我没有什么好说的了
#6
有啥说的,就这样了
#7
SQL> select t.* from test_row_cell t;
ID NAME
---------- --------------------
1 A
2 B
3 C
4 D
5 E
6 F
1 B
1 C
4 A
4 B
4 C
11 rows selected
SQL>
SQL> SELECT id, str
2 FROM (SELECT id,
3 row_number() over(PARTITION BY id ORDER BY name) AS rn,
4 name || lead(',' || name, 1) over(PARTITION BY id ORDER BY name) || lead(',' || name, 2) over(PARTITION BY id ORDER BY name) || lead(',' || name, 3) over(PARTITION BY id ORDER BY name) AS str
5 FROM test_row_cell)
6 WHERE rn = 1
7 ORDER BY 1;
ID STR
---------- --------------------------------------------------------------------------------
1 A,B,C
2 B
3 C
4 A,B,C,D
5 E
6 F
6 rows selected
ID NAME
---------- --------------------
1 A
2 B
3 C
4 D
5 E
6 F
1 B
1 C
4 A
4 B
4 C
11 rows selected
SQL>
SQL> SELECT id, str
2 FROM (SELECT id,
3 row_number() over(PARTITION BY id ORDER BY name) AS rn,
4 name || lead(',' || name, 1) over(PARTITION BY id ORDER BY name) || lead(',' || name, 2) over(PARTITION BY id ORDER BY name) || lead(',' || name, 3) over(PARTITION BY id ORDER BY name) AS str
5 FROM test_row_cell)
6 WHERE rn = 1
7 ORDER BY 1;
ID STR
---------- --------------------------------------------------------------------------------
1 A,B,C
2 B
3 C
4 A,B,C,D
5 E
6 F
6 rows selected
#8
谢谢大家的的回复!! 虽然现在暂时只看懂了3楼的语句. 不过啊... 嗯... 7楼的虽然还没看名白但是... 这个确实也可以在MySQL下执行么? 3楼的应该是只能在Oracle下执行吧 (也没关系, 先运行起来再说). 嗯... 反正现在就是查到了3个名字, 比如: "select NAME from EMP where SALARY = 1000"; 那么如果只针对这句话的话, 除了用Oracle专用的函数外, 要怎么修改才可以实现把3个名字组成一个字符串呢? 谢谢!!
#9
lz可以考虑把数据在oracle里处理好了之后,存到临时表里,在移植过去,不一定非要直接移植的时候处理。除了oracle专用函数外,估计只能用存储过程了。
#10
哦,mysql好像不能用row_number 。。
很多oracle特有的函数都不能用,又不给用存储过程,这个。。
很多oracle特有的函数都不能用,又不给用存储过程,这个。。
#11
感兴趣,继续。
#12
这种需求想要做到无缝移植,就会写得很麻烦
单ORACLE有比较简单的方法如三楼的
单ORACLE有比较简单的方法如三楼的