Reputation: 768
I have a table
in Oracle
database. I want to getting data that has the same column value row by row. For example :
1 871412 007607000176 12.02.2015 15:03:29 007607000176 ELTN 007607000176 ELTN 52079 28 156608 654108
2 753281 007607000176 23.01.2014 13:13:38 007607000176 ELTN 007607000176 ELTN 43494 24 82860 580360
3 739033 007607000176 23.01.2014 13:10:53 007607000176 ELTN 007607000176 ELTN 43494 24 82860 580360
4 528902 007607000176 22.02.2013 16:19:37 007607000176 ELTN 007607000176 ELTN 46776 26 19521 517021
5 468832 007607000176 15.02.2012 16:00:58 007607000176 ELTN 007607000176 ELTN 44708 32 10395 442895
6 36782 007607000176 01.04.2011 007607000176 ELTN 007607000176 ELTN
7 36781 007607000176 01.04.2010 007607000176 ELTN 007607000176 ELTN
8 36780 007607000176 01.04.2009 007607000176 ELTN 007607000176 ELTN
9 36779 007607000176 30.12.2007 007607000176 ELTN 007607000176 PRTG
10 36778 007607000176 01.04.2007 007607000176 PRTG 007607000176 BASC
11 36777 007607000176 01.04.2006 007607000176 BASC 007607000176 PRTG
12 36776 007607000176 01.04.2005 007607000176 PRTG 007607000176 PRTG
I want the row 6-7-8 row by row like below.Because their some columns are sames.
ELTN 007607000176 ELTN
ELTN 007607000176 ELTN
ELTN 007607000176 ELTN
I want all the records in table like this situation and take row by row. How can I do ?
EDIT
I use WITH
clause for solving this. First I brought the data with group. After that I brought the duplicate data information row by row.
Upvotes: 0
Views: 57
Reputation: 167774
Oracle 11g R2 Schema Setup:
CREATE TABLE TEST ( A, B, C, D, E, F, G, H, I, J, K, L ) AS
SELECT 1, 871412, '007607000176', TIMESTAMP '2015-02-12 15:03:29', '007607000176', 'ELTN', '007607000176', 'ELTN', 52079, 28, 156608, 654108 FROM DUAL
UNION ALL SELECT 2, 753281, '007607000176', TIMESTAMP '2014-01-23 13:13:38', '007607000176', 'ELTN', '007607000176', 'ELTN', 43494, 24, 82860, 580360 FROM DUAL
UNION ALL SELECT 3, 739033, '007607000176', TIMESTAMP '2014-01-23 13:10:53', '007607000176', 'ELTN', '007607000176', 'ELTN', 43494, 24, 82860, 580360 FROM DUAL
UNION ALL SELECT 4, 528902, '007607000176', TIMESTAMP '2013-02-22 16:19:37', '007607000176', 'ELTN', '007607000176', 'ELTN', 46776, 26, 19521, 517021 FROM DUAL
UNION ALL SELECT 5, 468832, '007607000176', TIMESTAMP '2012-02-15 16:00:58', '007607000176', 'ELTN', '007607000176', 'ELTN', 44708, 32, 10395, 442895 FROM DUAL
UNION ALL SELECT 6, 36782, '007607000176', TIMESTAMP '2011-04-01 00:00:00', '007607000176', 'ELTN', '007607000176', 'ELTN', NULL, NULL, NULL, NULL FROM DUAL
UNION ALL SELECT 7, 36781, '007607000176', TIMESTAMP '2010-04-01 00:00:00', '007607000176', 'ELTN', '007607000176', 'ELTN', NULL, NULL, NULL, NULL FROM DUAL
UNION ALL SELECT 8, 36780, '007607000176', TIMESTAMP '2009-04-01 00:00:00', '007607000176', 'ELTN', '007607000176', 'ELTN', NULL, NULL, NULL, NULL FROM DUAL
UNION ALL SELECT 9, 36779, '007607000176', TIMESTAMP '2007-12-30 00:00:00', '007607000176', 'ELTN', '007607000176', 'PRTG', NULL, NULL, NULL, NULL FROM DUAL
UNION ALL SELECT 10, 36778, '007607000176', TIMESTAMP '2007-04-01 00:00:00', '007607000176', 'PRTG', '007607000176', 'BASC', NULL, NULL, NULL, NULL FROM DUAL
UNION ALL SELECT 11, 36777, '007607000176', TIMESTAMP '2006-04-01 00:00:00', '007607000176', 'BASC', '007607000176', 'PRTG', NULL, NULL, NULL, NULL FROM DUAL
UNION ALL SELECT 12, 36776, '007607000176', TIMESTAMP '2005-04-01 00:00:00', '007607000176', 'PRTG', '007607000176', 'PRTG', NULL, NULL, NULL, NULL FROM DUAL
Query 1:
SELECT A, C, E, F, G, H, I, J, K, L
FROM TEST t
WHERE EXISTS (
SELECT 'X'
FROM TEST x
WHERE x.ROWID <> t.ROWID
AND x.C = t.C
AND x.E = t.E
AND x.F = t.F
AND x.G = t.G
AND x.H = t.H
AND (x.I = t.I OR ( x.I IS NULL AND t.I IS NULL ))
AND (x.J = t.J OR ( x.J IS NULL AND t.J IS NULL ))
AND (x.K = t.K OR ( x.K IS NULL AND t.K IS NULL ))
AND (x.L = t.L OR ( x.L IS NULL AND t.L IS NULL ))
)
| A | C | E | F | G | H | I | J | K | L |
|---|--------------|--------------|------|--------------|------|--------|--------|--------|--------|
| 2 | 007607000176 | 007607000176 | ELTN | 007607000176 | ELTN | 43494 | 24 | 82860 | 580360 |
| 3 | 007607000176 | 007607000176 | ELTN | 007607000176 | ELTN | 43494 | 24 | 82860 | 580360 |
| 6 | 007607000176 | 007607000176 | ELTN | 007607000176 | ELTN | (null) | (null) | (null) | (null) |
| 7 | 007607000176 | 007607000176 | ELTN | 007607000176 | ELTN | (null) | (null) | (null) | (null) |
| 8 | 007607000176 | 007607000176 | ELTN | 007607000176 | ELTN | (null) | (null) | (null) | (null) |
Upvotes: 1
Reputation: 1666
One solution could be to join the table with itself, and check that every relevant column is the same, except the id. So you get only a join if you have a row with exactly same data except the id:
Select a.colname, a.colname, a.colname from table as a
inner join table as b on a.Id != b.ID
and a.date = b.date and a.Code = b.Code ... all other relevant columns... and a.code2 = b.code2
Upvotes: 0