关于查询结果中多行字段合并到一行上的SQL语句写法

我纯洁全身都纯洁 2013-04-25 10:34:18

SELECT
C.CUST_ID,C.CUST_NAME,S2.PVI,S3.PUI_NBR
FROM CUST C,SERV_SERVICE S1,SERV_PVI S2,SERV_PUI S3
WHERE C.CUST_ID=S1.CUST_ID
AND S1.SERV_SERVICE_ID=S2.SERV_SERVICE_ID
AND S1.SERV_SERVICE_ID=S3.SERV_SERVICE_ID
AND S1.STATE='S11'
AND C.CUST_NAME LIKE '韩永佳%';


结果是这样

我想让结果只显示成一行。把PUI_NBR分三列显示SQL怎么写?
...全文
1275 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lnuwhy 2013-04-25
  • 打赏
  • 举报
回复
SELECT CUST_ID,CUST_NAME,PVI, max(decode(r,1,PUI_NBR,null)) PUI_NBR1, max(decode(r,2,PUI_NBR,null)) PUI_NBR2, max(decode(r,3,PUI_NBR,null)) PUI_NBR3 from (SELECT C.CUST_ID,C.CUST_NAME,S2.PVI,S3.PUI_NBR, row_number() over(partition by C.CUST_ID,C.CUST_NAME,S2.PVI order by S3.PUI_NBR ) r FROM CUST C,SERV_SERVICE S1,SERV_PVI S2,SERV_PUI S3 WHERE C.CUST_ID=S1.CUST_ID AND S1.SERV_SERVICE_ID=S2.SERV_SERVICE_ID AND S1.SERV_SERVICE_ID=S3.SERV_SERVICE_ID AND S1.STATE='S11' AND C.CUST_NAME LIKE '韩永佳%') group by CUST_ID,CUST_NAME,PVI;
lnuwhy 2013-04-25
  • 打赏
  • 举报
回复

SELECT CUST_ID,CUST_NAME,PVI,
max(decode(r,1,PUI_NBR,null)) PUI_NBR1,
max(decode(r,2,PUI_NBR,null)) PUI_NBR2,
max(decode(r,3,PUI_NBR,null)) PUI_NBR3
from
(SELECT C.CUST_ID,C.CUST_NAME,S2.PVI,S3.PUI_NBR row_number() over(partition by C.CUST_ID,C.CUST_NAME,S2.PVI order by S3.PUI_NBR ) r FROM CUST C,SERV_SERVICE S1,SERV_PVI S2,SERV_PUI S3
WHERE C.CUST_ID=S1.CUST_ID
AND S1.SERV_SERVICE_ID=S2.SERV_SERVICE_ID
AND S1.SERV_SERVICE_ID=S3.SERV_SERVICE_ID
AND S1.STATE='S11' AND C.CUST_NAME LIKE '韩永佳%')
group by CUST_ID,CUST_NAME,PVI;
raymonshi 2013-04-25
  • 打赏
  • 举报
回复
引用 5 楼 luoyoumou 的回复:
-- 如果是11g的话,用Listagg分析函数,其执行效率要高于 wm_concat()函数,而且listagg函数要比wm_concat函数更灵活。
正解
善若止水 2013-04-25
  • 打赏
  • 举报
回复
引用 4 楼 luoyoumou 的回复:
SQL code?1234567SELECT C.CUST_ID,C.CUST_NAME,S2.PVI, WM_CONCAT(S3.PUI_NBR) AS PUI_NBRS FROM CUST C,SERV_SERVICE S1,SERV_PVI S2,SERV_PUI S3 WHERE C.CUST_ID=S1.CUST_ID AND S1.SERV_SERVIC……
http://blog.csdn.net/funnsy/article/details/7479946
  • 打赏
  • 举报
回复
做前台的伤不起。。
  • 打赏
  • 举报
回复
引用 5 楼 luoyoumou 的回复:
-- 如果是11g的话,用Listagg分析函数,其执行效率要高于 wm_concat()函数,而且listagg函数要比wm_concat函数更灵活。

是11g
大神 这个能不能把他PUI_NBRS分成三列呀,如果和一起我还要拆开
你写的语句可以运行
给你放个图
luoyoumou 2013-04-25
  • 打赏
  • 举报
回复
-- 如果是11g的话,用Listagg分析函数,其执行效率要高于 wm_concat()函数,而且listagg函数要比wm_concat函数更灵活。
luoyoumou 2013-04-25
  • 打赏
  • 举报
回复
SELECT C.CUST_ID,C.CUST_NAME,S2.PVI, WM_CONCAT(S3.PUI_NBR) AS PUI_NBRS
  FROM CUST C,SERV_SERVICE S1,SERV_PVI S2,SERV_PUI S3
  WHERE C.CUST_ID=S1.CUST_ID
  AND S1.SERV_SERVICE_ID=S2.SERV_SERVICE_ID
  AND S1.SERV_SERVICE_ID=S3.SERV_SERVICE_ID
  AND S1.STATE='S11' AND C.CUST_NAME LIKE '韩永佳%'
GROUP BY C.CUST_ID,C.CUST_NAME,S2.PVI;
  • 打赏
  • 举报
回复
[quote=引用 2 楼 hjgzj 的回复:] 引用 1 楼 lnuwhy 的回复:PUI_NER不管怎么样都是3种数据吗?是每次查询出来都是三行吗? 是的固定的 一个人就是三条
  • 打赏
  • 举报
回复
引用 1 楼 lnuwhy 的回复:
PUI_NER不管怎么样都是3种数据吗?是每次查询出来都是三行吗?
是的固定的 我不想在查询结果里面拼装 因为模糊查询可能有几万条结果 在java中处理有可能太慢
lnuwhy 2013-04-25
  • 打赏
  • 举报
回复
PUI_NER不管怎么样都是3种数据吗?是每次查询出来都是三行吗?
lnuwhy 2013-04-25
  • 打赏
  • 举报
回复
SELECT CUST_ID,CUST_NAME,PVI, max(decode(r,1,PUI_NBR,null)) PUI_NBR1, max(decode(r,2,PUI_NBR,null)) PUI_NBR2, max(decode(r,3,PUI_NBR,null)) PUI_NBR3 from (SELECT C.CUST_ID,C.CUST_NAME,S2.PVI,S3.PUI_NBR,rownum r FROM CUST C,SERV_SERVICE S1,SERV_PVI S2,SERV_PUI S3 WHERE C.CUST_ID=S1.CUST_ID AND S1.SERV_SERVICE_ID=S2.SERV_SERVICE_ID AND S1.SERV_SERVICE_ID=S3.SERV_SERVICE_ID AND S1.STATE='S11' AND C.CUST_NAME LIKE '韩永佳%') group by CUST_ID,CUST_NAME,PVI;
  • 打赏
  • 举报
回复
引用 11 楼 lnuwhy 的回复:
SELECT CUST_ID,CUST_NAME,PVI, max(decode(r,1,PUI_NBR,null)) PUI_NBR1, max(decode(r,2,PUI_NBR,null)) PUI_NBR2, max(decode(r,3,PUI_NBR,null)) PUI_NBR3 from (SELECT C.CUST_ID,C.CUST_NAM……
谢谢 可以用 结贴了。

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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