我有一个Oracle表,其中有[row,grp and pdate]列,我需要每个[pdate] ]列都不出现[grp]列,如果相同的[grp]在其余的行计数中重复,则应像预期结果[表3]一样得到休息
表数据[表1]
ROW GRP PDATE
----------------------
0001 361 06-MAR-23
0002 361 07-MAR-23
0003 361 08-MAR-23
0004 417 09-MAR-23
0005 361 10-MAR-23
0006 361 11-MAR-23
0007 362 12-MAR-23
0008 361 13-MAR-23
0009 361 14-MAR-23
0010 361 15-MAR-23
0011 361 16-MAR-23
0012 417 17-MAR-23
0013 417 18-MAR-23
0014 362 19-MAR-23
0015 362 20-MAR-23
0016 362 21-MAR-23
不工作的SQL [表2]
select ROW,GRP,PDATE
,count (1) OVER ( PARTITION BY A.GRP ORDER BY A.GRP,A.PDATE) AS COUNT
from t2 a ORDER BY PDATE;
ROW_ GRP_ PDATE_ COUNT
---------------------- ---------------------- ------------------------- ----------------------
48 361 06-MAR-23 1
49 361 07-MAR-23 2
34 362 08-MAR-23 1
50 361 08-MAR-23 3
51 417 09-MAR-23 1
35 362 09-MAR-23 2
52 361 10-MAR-23 4
36 362 10-MAR-23 3
53 361 11-MAR-23 5
40 388 12-MAR-23 1
54 361 12-MAR-23 6
55 361 13-MAR-23 7
41 388 13-MAR-23 2
42 388 14-MAR-23 3
56 361 14-MAR-23 8
43 388 15-MAR-23 4
57 361 15-MAR-23 9
[表3]
预期结果(使用Oracle COUNT(1)OVER(PARTITION BY???order by)AS Count)基于日期中未出现GRP)
ROW GRP PDATE COUNT
---------------------- ------
0001 361 06-MAR-23 3
0002 361 07-MAR-23 3
0003 361 08-MAR-23 3
0004 417 09-MAR-23 1
0005 361 10-MAR-23 2
0006 361 11-MAR-23 2
0007 362 12-MAR-23 1
0008 361 13-MAR-23 4
0009 361 14-MAR-23 4
0010 361 15-MAR-23 4
0011 361 16-MAR-23 4
0012 417 17-MAR-23 2
0013 417 18-MAR-23 2
0014 362 19-MAR-23 3
0015 362 20-MAR-23 3
0016 362 21-MAR-23 3
目的是创建HTML表格与“colspan”的基础上的结果所给予的计数列
示例输出
---------------------------------------------------------------------------------------------
DATE | 06-MAR-23 (COLSPAN=3) | 07-MAR-23 COLSPAN=1 | 08-MAR-23 COLSPAN=3
---------------------------------------------------------------------------------
AAA | 361-1 | 361-2 | 361-3 | 417-1 | 361-1 | 361-2
---------------------------------------------------------------------------------
2条答案
按热度按时间p8ekf7hl1#
在您改变主意并修改了示例表内容之后,它看起来毕竟是关于 islands 的。首先创建“groups”(我的代码中的
rn
列),然后以其解析形式应用count
函数。c90pui9n2#
在Oracle 12中,您可以使用
MATCH_RECOGNIZE
进行逐行模式匹配:其中,对于示例数据:
输出:
| 放射性同位素|玻璃钢|日期|碳纳米管|
| - ------|- ------|- ------|- ------|
| 零零零一|三六一|2023年3月6日00时00分|三个|
| 小零零零二|三六一|2023年3月7日00时00分|三个|
| 小零零零三|三六一|2023年3月8日00时00分|三个|
| 0004|四百七十一|2023年3月9日00时00分|1个|
| 小零零五|三六一|2023年3月10日00时00分|第二章|
| 小零零零六|三六一|2023年3月11日00时00分|第二章|
| 零零七|三六二|2023年3月12日00时00分|1个|
| 小零零零八|三六一|2023年3月13日00时00分|四个|
| 小零零一一|三六一|2023年3月16日00时00分|四个|
| 小零零一零|三六一|2023年3月15日00时00分|四个|
| 0009|三六一|2023年3月14日00时00分|四个|
| 0012|四一七|2023年3月17日00时00分|第二章|
| 0013|四一七|2023年3月18日00时00分|第二章|
| 0015|三六二|2023年3月20日00时00分|三个|
| 零零四|三六二|2023年3月19日00时00分|三个|
| 小零零一六|三六二|2023年3月21日00时00分|三个|
fiddle
在Oracle 11 g中,您可以用途:
或
或:
输出结果与在更高版本中使用
MATCH_RECOGNIZE
相同。fiddle