Home » SQL & PL/SQL » SQL & PL/SQL » Filling values (Oracle Database 11g Enterprise Edition Release 11.2.0.4.0)
| Filling values [message #643822] |
Mon, 19 October 2015 10:01  |
manubatham20
Messages: 566 Registered: September 2010 Location: Seattle, WA, USA
|
Senior Member |

|
|
Hi,
Please help me with the below problem.
I am trying to fill blank values in zone column according to loc column using below query.
WITH temp
AS (SELECT 'ABC' col1,
'BCD' col2,
1 seq,
NULL loc
FROM DUAL
UNION ALL
SELECT 'ABC' col1,
'BCD' col2,
2 seq,
NULL loc
FROM DUAL
UNION ALL
SELECT 'ABC' col1, 'BCD' col2, 3 seq, 1 loc FROM DUAL
UNION ALL
SELECT 'ABC' col1,
'BCD' col2,
4 seq,
NULL loc
FROM DUAL
UNION ALL
SELECT 'ABC' col1, 'BCD' col2, 5 seq, 2 loc FROM DUAL
UNION ALL
SELECT 'ABC' col1,
'BCD' col2,
6 seq,
NULL loc
FROM DUAL
UNION ALL
SELECT 'ABC' col1,
'BCD' col2,
6 seq,
NULL loc
FROM DUAL
UNION ALL
SELECT 'ABC' col1,
'BCD' col2,
7 seq,
NULL loc
FROM DUAL
UNION ALL
SELECT 'ABC' col1,
'BCD' col2,
8 seq,
NULL loc
FROM DUAL
UNION ALL
SELECT 'ABC' col1, 'BCD' col2, 9 seq, 3 loc FROM DUAL)
SELECT col1,
col2,
seq,
loc
--,LAST_VALUE (
-- loc)
--OVER (PARTITION BY col1, col2
-- ORDER BY seq
-- RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
-- zone
FROM temp;
The requirement is, if we partition by col1 and col2 and sort by loc, I have to fill first available loc value in all preceding rows till the last loc.
The result should look like the image attached.
EDIT : because results in Quote was not indented properly, so replaced with an image.
Thanks,
Manu
-
Attachment: result.PNG
(Size: 8.98KB, Downloaded 919 times)
[Updated on: Mon, 19 October 2015 10:06] Report message to a moderator
|
|
|
|
| Re: Filling values [message #643824 is a reply to message #643822] |
Mon, 19 October 2015 10:30   |
 |
Michel Cadot
Messages: 68776 Registered: March 2007 Location: Saint-Maur, France, https...
|
Senior Member Account Moderator |
|
|
SQL> WITH temp
2 AS (SELECT 'ABC' col1,
3 'BCD' col2,
4 1 seq,
5 NULL loc
6 FROM DUAL
7 UNION ALL
8 SELECT 'ABC' col1,
9 'BCD' col2,
10 2 seq,
11 NULL loc
12 FROM DUAL
13 UNION ALL
14 SELECT 'ABC' col1, 'BCD' col2, 3 seq, 1 loc FROM DUAL
15 UNION ALL
16 SELECT 'ABC' col1,
17 'BCD' col2,
18 4 seq,
19 NULL loc
20 FROM DUAL
21 UNION ALL
22 SELECT 'ABC' col1, 'BCD' col2, 5 seq, 2 loc FROM DUAL
23 UNION ALL
24 SELECT 'ABC' col1,
25 'BCD' col2,
26 6 seq,
27 NULL loc
28 FROM DUAL
29 UNION ALL
30 SELECT 'ABC' col1,
31 'BCD' col2,
32 6 seq,
33 NULL loc
34 FROM DUAL
35 UNION ALL
36 SELECT 'ABC' col1,
37 'BCD' col2,
38 7 seq,
39 NULL loc
40 FROM DUAL
41 UNION ALL
42 SELECT 'ABC' col1,
43 'BCD' col2,
44 8 seq,
45 NULL loc
46 FROM DUAL
47 UNION ALL
48 SELECT 'ABC' col1, 'BCD' col2, 9 seq, 3 loc FROM DUAL)
49 select t.*,
50 first_value(loc ignore nulls) over
51 (partition by col1, col2 order by seq
52 rows between current row and unbounded following)
53 zone
54 from temp t
55 order by col1, col2, seq
56 /
COL COL SEQ LOC ZONE
--- --- ---------- ---------- ----------
ABC BCD 1 1
ABC BCD 2 1
ABC BCD 3 1 1
ABC BCD 4 2
ABC BCD 5 2 2
ABC BCD 6 3
ABC BCD 6 3
ABC BCD 7 3
ABC BCD 8 3
ABC BCD 9 3 3
10 rows selected.
|
|
|
|
|
|
Goto Forum:
Current Time: Sat Jul 11 10:06:20 CDT 2026
|