ORACLE将连续或不连续月份合并sql怎么写,要求不通过存储过程实现 30

现有表中数据namemonthA2018-01A2018-02A2018-03A2018-06B2018-04B2018-05想得到的结果namehzA2018-01至2... 现有表中数据
name month
A 2018-01
A 2018-02
A 2018-03
A 2018-06
B 2018-04
B 2018-05
想得到的结果
name hz
A 2018-01至2018-03,2018-06
B 2018-04至2018-05
展开
 我来答
oracle九叔
2019-03-25 · TA获得超过4.9万个赞
知道大有可为答主
回答量:4.9万
采纳率:83%
帮助的人:1.3亿
展开全部

你好的!

答案如下:

WITH t AS 
(SELECT 'A' COL1, '2018-01' COL2 FROM dual UNION ALL
SELECT 'A', '2018-02' FROM dual UNION ALL
SELECT 'A', '2018-03' FROM dual UNION ALL
SELECT 'A', '2018-06' FROM dual UNION ALL
SELECT 'B', '2018-04' FROM dual UNION ALL
SELECT 'B', '2018-05' FROM dual)
SELECT col1,to_char(wm_concat(cat)) FROM (
SELECT DISTINCT  col1,MIN(col2)OVER(PARTITION BY col1,flg1)||'至'||Max(col2)OVER(PARTITION BY col1,flg1) cat
FROM(
SELECT COL1,COL2,
CASE WHEN SUBSTR(COL2,6) - LAG(SUBSTR(COL2,6))OVER(PARTITION BY COL1 ORDER BY COL2 ASC) = 1
  OR  lead(SUBSTR(COL2,6))OVER(PARTITION BY COL1 ORDER BY COL2 ASC) - SUBSTR(COL2,6) = 1
THEN 1 ELSE 0 END FLG1 FROM T) WHERE FLG1 = 1
  UNION ALL
SELECT DISTINCT  col1,col2
FROM(
SELECT COL1,COL2,
CASE WHEN SUBSTR(COL2,6) - LAG(SUBSTR(COL2,6))OVER(PARTITION BY COL1 ORDER BY COL2 ASC) = 1
  OR  lead(SUBSTR(COL2,6))OVER(PARTITION BY COL1 ORDER BY COL2 ASC) - SUBSTR(COL2,6) = 1
THEN 1 ELSE 0 END FLG1 FROM T) WHERE FLG1 = 0)
  GROUP BY col1

欢迎追加悬赏并采纳!以后有SQL 问题随便问!!!

帐号已注销
2019-03-23 · TA获得超过457个赞
知道小有建树答主
回答量:1567
采纳率:46%
帮助的人:71.9万
展开全部

基础类
freelife258
06-08 13:26
等级 
8次回复
在存储过程中如何循环月份
想写个带参数的存储过程
如何将十二个月(JAN,FEB,MAR,-----,DEC)显示在表名中,效果是在每次循环过程中替换一个月的月字段,下例已经写好12次循环过程:

Create procedure proc_test @Year nvarchar(4)
as

go
declare @month int
set @month=1
declare @sql varchar(max)
while(@month<=12)
begin
set @sql = N'select * from Book_Account_'+@para+'_'+cast(@Month as varchar(10))
exec (@sql)
set @month=@month+1
end
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
不惑出彩
2019-03-25 · 超过33用户采纳过TA的回答
知道答主
回答量:97
采纳率:84%
帮助的人:17.3万
展开全部
你这样的要求,仅仅用sql语句,我感觉很不好实现,但是应该还是可以的。具体你可以研究下oracle的listagg和wmconcat函数,这两个函数可以实现分组聚合,然后你再在sql里用case when判断不同逻辑,应该可以实现。。。试试吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乌金探索者
2019-03-23 · TA获得超过722个赞
知道答主
回答量:8995
采纳率:22%
帮助的人:252万
展开全部
楼上说得对啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式