查询1:
列名
Cust_ID,Cust_Name
cust1 ,name1
cust2 ,name1
cust3 ,name1
cust11 ,name2
cust12 ,name2
............
就是一个人可能使用多个custID 一般是小于3个的,不确定就是1-3,正常情况是一个name对应一个custid
结果:name1 ,cust1 ,cust2 ,cust3
name2 ,cust11,cust12
............
我是想不出用sql直接输出的逻辑,不要用dbms_output,这样不是我的要求
列名
Cust_ID,Cust_Name
cust1 ,name1
cust2 ,name1
cust3 ,name1
cust11 ,name2
cust12 ,name2
............
就是一个人可能使用多个custID 一般是小于3个的,不确定就是1-3,正常情况是一个name对应一个custid
结果:name1 ,cust1 ,cust2 ,cust3
name2 ,cust11,cust12
............
我是想不出用sql直接输出的逻辑,不要用dbms_output,这样不是我的要求
--Oracle10g以后,使用wmsys.wm_concat分析函数来处理:select Cust_Name, wmsys.wm_concat(Cust_ID) from tableA group by Cust_Name;
wmsys.wm_concat(Cust_ID); 好样的,长见识了
--
-- 表定义
--
CREATE TABLE Samples.dbo.Scores
(
Student VARCHAR2(50),
Course VARCHAR2(50),
Score INT
)--
-- 静态SQL (横行转竖列)
--
SELECT
Student,
MAX(CASE WHEN Course='C#' THEN Score END) AS C#,
MAX(CASE WHEN Course='HTML' THEN Score END) AS HTML,
MAX(CASE WHEN Course='Java' THEN Score END) AS Java
FROM Scores
GROUP BY Student
/--
-- 动态SQL (横行转竖列)
--
DECLARE v_SQL VARCHAR2(1000)
BEGIN
v_SQL = 'SELECT Student' SELECT v_SQL=v_SQL || ', MAX(CASE WHEN Course=''' || Course || ''' THEN Score END) AS ' || Course
FROM Scores
GROUP BY Course v_SQL=v_SQL || ' FROM Scores GROUP BY Student' EXECUTE(v_SQL)
END
/
没测试过,楼主试试