The most elegant way to get the difference between two tables - not least!
HelloSimplified example of what I'm trying to achieve - I have two tables ORIGINAL and REVISED.
My aim is to compare the two, such as; -
When there is data in the two tables I get the difference between the Budget column, and if there is no difference, so I don't want no lines.
When data exists in the ORIGINAL, but not in review, I want to the inverse of the current value of the Budget column.
Where the data exist in REVISED I want the REVISED value.
I can see how I can do this, see below, but is there a more elegant solution?
Data for the ORIGINAL table
select '801040' entity, '2186' expense_type, 234000 budget
from dual
union all
select '801040' entity, '3001' expense_type, 1000 budget
from dual
union all
select '801040' entity, 'P132' expense_type, 34000 budget
from dual
union all
select '801040' entity, 'P135' expense_type, 43000 budget
from dual
Data for the REVISED tableselect '801040' entity, '2186' expense_type, 235000 budget
from dual
union all
select '801040' entity, 'P132' expense_type, 34000 budget
from dual
union all
select '801040' entity, 'P139' expense_type, 56000 budget
from dual
Desired outputENTITY EXPENSE_TYPE DIFFERENCE
------ ------------ ----------
801040 2186 1000
801040 3001-1000
801040 P135-43000
801040 P139 56000
5 selected lines.
Code current to achieve this, is there a better way?
select original.entity
, original.expense_type
, (nvl(revised.budget,0) - original.budget) as difference
from original
, revised
where original.entity = revised.entity(+)
and original.expense_type = revised.expense_type(+)
and (nvl(revised.budget,0) - original.budget) != 0
union all
select revised.entity
, revised.expense_type
, revised.budget as difference
from revised
where not exists
(select 'x'
from original
where original.entity = revised.entity
and original.expense_type = revised.expense_type)
and revised.budget != 0
Thanks a lot for your comments,.Robert.
Published by: Robert Angel on January 17, 2012 03:31 to change is not equal to! = - Thanks for the heads up
SQL> with original
2 as
3 (
4 select '801040' entity, '2186' expense_type, 234000 budget
5 from dual
6 union all
7 select '801040' entity, '3001' expense_type, 1000 budget
8 from dual
9 union all
10 select '801040' entity, 'P132' expense_type, 34000 budget
11 from dual
12 union all
13 select '801040' entity, 'P135' expense_type, 43000 budget
14 from dual
15 )
16 , revised
17 as
18 (
19 select '801040' entity, '2186' expense_type, 235000 budget
20 from dual
21 union all
22 select '801040' entity, 'P132' expense_type, 34000 budget
23 from dual
24 union all
25 select '801040' entity, 'P139' expense_type, 56000 budget
26 from dual
27 )
28 select *
29 from (
30 select nvl(o.entity, r.entity) entity,
31 nvl(o.expense_type, r.expense_type) expense_type,
32 nvl(r.budget,0) - nvl(o.budget,0) budget
33 from original o
34 full join revised r
35 on o.entity = r.entity
36 and o.expense_type = r.expense_type
37 )
38 where budget <> 0
39 /
ENTITY EXPE BUDGET
------ ---- ----------
801040 2186 1000
801040 P135 -43000
801040 3001 -1000
801040 P139 56000
SQL>
Tags: Database
Similar Questions
-
Find the difference between two date and time
Hi friends,
I wanted to find the difference between two date and time, but my qury is slightest error "invalid number."
select sql_step_num,proc_name,run_seqno,start_date,end_date,(to_char(start_date,'HH24-MI-SS') - to_char(end_date,'HH24-MI-SS') ) as ed from eval.EVAL_RUNTIME_DETAILS where trunc(start_date) = trunc(sysdate) order by sql_step_num;
You try to get the feel between two char strings.
And more difference between two dates gives a NUMBER of days.
Try this:select sql_step_num,proc_name,run_seqno,start_date,end_date,numtodsinterval(end_date-start_date,'DAY') as ed from eval.EVAL_RUNTIME_DETAILS where trunc(start_date) = trunc(sysdate) order by sql_step_num;
-
What is the difference between a table and a subform?
What is the difference between a table and a subform in LC forms? Please post your answers about the merits and demerits of using subforms instead of tables.
Hello
a table is simply a set of subforms with a particular role.
It is easier to handle the tables if they must be dynamic (add or remove lines, show or hide lines when page breaks appear etc..).
And Designers UI has some dialogue prepared in the object palette to simplify the settings of the tables.
For subforms, dialog boxes are more frequent, so you have yourself a little more script.
But at least you can do everything with subforms as you can do with tables.
The only one who is not very good with tables we work when you wrap arrays in other tables.
-
How to find the difference between two dates in the presentation layer
Hi gurus,
Hello to everyone. Today, I came with the new requirement.
I need to know the difference between a date and the current date in the formula column application presentation layer.by.
Thank you and best regards,
PratesHi Navin,
TIMESTAMPDIFF function first determines the timestamp component that corresponds to the specified interval setting. For example, SQL_TSI_DAY corresponds to the day component and SQL_TSI_MONTH corresponds to the component "month".
If you want to display the difference between two dates in days using SQL_TSI_DAY, unlike butterflies SQL_TSI_MONTH and so on...
hope you understand...
Award points and to close the debate, if your question is answered.
See you soon,.
Aravind -
Difference between two tables (ORA-01722)
I am trying to get the difference of two tables on two databases.
Walker I run the script below, it gives me a result that is not accurate.
Select name, creation_time of v$datafile@REMOTE_database.com
However, when I run this script, I get an accurate count of the difference. How can I list the exact number instead of only to count the difference? Want lists all five name missing on table 2.
2 LESS THAN
3 select name, creation_time from v$ datafile;
I get 14 ranks of foregoing.
SQL > SELECT a.cnt - b.cnt
> count 2 (name) select cnt (of v$datafile@REMOTE_database.com) a, b3 (select count (name) NTC v$ datafile);
edited by: Albert Zaza on July 19, 2010 11:19
A.CNT - B. CNT
-----------
5have you tried:
select trim(upper(name)) from v$datafile@REMOTE_database.com MINUS select trim(upper(name)) from v$datafile;
-
Dynamic action - Get the difference between two dates + times
I have problems a little dynamic to work action. I'm trying to get the time between two dates with the time difference.
Here is what I got (this is apex 4.0):
Two date pickers + two numbers fields (date/start/end times)
I created a dynamic action on the page who fires on the point lose focus (above points).
The real action for the DA is the body of the PL/SQL function:
When I change the values on the page, I get the following error:declare end_date DATE; start_date DATE; Begin start_date := to_char(:P1_START_DATE || ' ' || :P1_START_TIME, 'DD-MON-YYYY HH:MIAM'); end_date := to_char(:P1_END_DATE || ' ' || :P1_END_TIME, 'DD-MON-YYYY HH:MIAM'); :P1_HOURS := end_date-start_date; End;
AJAX call back Server error ORA-06502: PL/SQL: digital or value error: character number conversion error to set the value.
I'm guessing that there is a problem with the date formatting, but I can't make it work. Thanks in advance!Hi djston,
because you chose the dynamic action of 'Set value' with the "Body of the PL/SQL function" type you need to return the value. Try the following code
declare end_date DATE; start_date DATE; Begin start_date := to_date(:P1_START_DATE || ' ' || :P1_START_TIME, 'DD-MM-YYYY HH:MIAM'); end_date := to_date(:P1_END_DATE || ' ' || :P1_END_TIME, 'DD-MM-YYYY HH:MIAM'); RETURN (end_date-start_date)*24; End;
and P1_REQUESTED_HOURS like 'item affected. "
Concerning
Patrick
-----------
My Blog: http://www.inside-oracle-apex.com
APEX 4.0 Plug-Ins: http://apex.oracle.com/plugins
Twitter: http://www.twitter.com/patrickwolfPublished by: Patrick Wolf on January 17, 2011 10:54
-
How can I compare the differences between two files After Effects?
I have a major problem. I was working on special effects for a film. In After Effects, when I change siggificant, I often have to register under and create a new name so I can go back to the old work if necessary. It comes in a case, I have come back from earlier works. If I use these two files After Effects allows you to create multiple clips of effects. And I do not remember just where you look at it, it is better. Does anyone know a good way to compare the differences between the files?
One thing to keep this conversation on the right way: I know that I did a stupid thing. I've never done this before so can we please not spend a lot of time on how to avoid this problem and stick to how we solve this problem?
If you encounter difficulties to identify differences in the old and new versions, you can use this procedure:
To avoid confusion, I'll call your former company and your most recent compositions CompB comps.
CompA drag "New Comp" icon in the project window. This will create a new temporary layout that contains the nested CompA.
Drag in your new COMP CompB temporary ensure it aligns image for image with CompA.
Place the top layer (CompB) difference.
Now, when you play through the comp, you'll see differences in color at a time where the comparison and CompB are not identical.
-
HelloI have a laptop (TotalTime1) which refers to two other cells in the updated hour-shaped (Start1 and 1 to finish).
The formula below is intended to make the difference between the time of departure and of arrival if they are populated.
I had to work unconditionally HasValue, but the formula was calculated when there is no value in the Start1 and Finish1 (due to the time format).
This is the code I have, it is said that there is an error of almost the last line; I'm sorry if I'm posting this in the wrong way, I haven't posted on this forum before but this is:
If (HasValue (Finish1) and HasValue (Start1)) then if (Time2Num (Start1.formattedValue, "HH: mm") < Time2Num (Finish1.formattedValue, "Hh: mm")) then Abs (Time2Num (Start1.formattedValue, "HH: mm")-Time2Num (Finish1.formattedValue, "HH: mm")) / (60 * 60 * 1000) another 24 - ABS (Time2Num (Finish1.formattedValue, "HH: mm")-Time2Num (Start1.formattedValue, "HH: mm")) / (60 * 60 * 1000) endif
Any help would be appreciated.
Cordially Fetachini
you need an another endif at the end (you have nested statement and only 1 endif)
-
How to find the difference between two dates in time except Sunday
Hi all
I have a table, as shown below.
I would like to know the difference between same tr_ids create_time, which should give out in hours except Sunday.SQL> select * from test; TR_ID CREATE_TIME CODE -------------------------------------------------- --------------------------------------------------------------------------- ---------- S12341 05-JUN-12 12.20.52.403000 AM 1003 S12342 11-JUN-12 11.15.33.182000 AM 1003 S12342 07-JUN-12 12.00.36.573000 PM 1002 S12343 20-JUN-12 12.34.37.102000 AM 1003 S12343 15-JUN-12 11.34.27.141000 PM 1002 S12344 01-JUL-12 10.01.06.657000 PM 1002 S12344 06-JUL-12 12.01.04.188000 AM 1003 S12341 31-MAY-12 11.20.38.529000 PM 1002
For example:
TR_ID: S12344
1002_Create_time: July 1, 12 PM 10.01.06.657000 (i.e. Sunday)
1003_Create_time: 12.01.04.188000 AM 6 July 12
1002 create time is 22:00 Sunday.
If the query must exclude only the hours of Sunday which is 10 p.m. to Monday 00 h which is 2 Hrs.
I tried the sub query after doing a search on this forum but I am not getting the desired output.
Need help to get the desired o/pSELECT count(*) FROM (SELECT ROWNUM RNUM,tr_id,create_time CT_1002 FROM test c WHERE c.tr_id='S12344' and ROWNUM <= (select (cast(a.create_time as date)-cast((select create_time from test b where a.tr_id=b.tr_id and code=1002) as date)) from test a where a.code=1003 and a.tr_id=c.tr_id) + 1) d WHERE to_char(cast((select create_time from test e where e.tr_id=d.tr_id and code=1002) as date) + RNUM - 1, 'DY') NOT IN('SUN');
Hello
If I unederstand the problem correctly, that's what you want:
WITH got_extrema AS ( SELECT tr_id , CAST (MIN (create_time) AS DATE) AS start_date , CAST (MAX (create_time) AS DATE) AS end_date FROM test GROUP BY tr_id ) SELECT tr_id , start_date, end_date -- If wanted , 24 * ( ( ( TRUNC (end_date, 'IW') -- Count -1 day for every full week - TRUNC (start_date, 'IW') ) / -7 ) + LEAST ( end_date -- If end_date is a Sunday , TRUNC (end_date, 'IW') + 6 -- consider it 00:00:00 on Sunday ) - CASE WHEN start_date >= TRUNC (start_date, 'IW') + 6 -- If start_date is a Sunday THEN TRUNC (start_date, 'IW') + 6 -- consider it 00:00:00 Sunday ELSE start_date END ) AS total_hours FROM got_extrema ;
I guess that you don't need to worry about fractions of a second. As you did in the code you have posted, I am to convert the TIMESTAMP to date values, because of DATE arithmetic and functions are so much better than what is available for timestamps.
Basically, it's just to find the number of days between start_date and end_date and multiplying by 24, with these twists:
(a) 1 day is deducted for each week between start_date and end_date
(b) if End_date is a Sunday, none of the end_date himself hours are counted
(c) If start_date is a Sunday, then all the start_date himself hours are counted. Why these hours should be counted? Because 1 day is already being deducted for the week which includes start_date, which contains only this Sunday.TRUNC (dt, 'IW') is the beginning of the ISO week containing dt; in other words, 00:00:00 the or before the dt last Monday. This is not the NLS parameters.
Of course, I can't test without some sample data and the exact results you want from these data. You may need a little something more If start_date and end_date are both on the same Sunday.
Whenever you have a problem, please post a small example of data (CREATE TABLE and only relevant columns, INSERT statements) of all of the tables involved.
Also post the results you want from this data, as well as an explanation of how you get these results from these data, with specific examples.
Always tell what version of Oracle you are using.
See the FAQ forum {message identifier: = 9360002} -
How to tell the difference between two dates
Hello:
I have a question on how to get the difference in quantities for two dates in the replies and dashboard.
This is the scenario. I have two guests date and three columns. The first column must be the sum of the amounts for the first quick date. The second column should be the sum of the amounts for the second fast date. And the third column is the difference between the first two columns.
Basically, I'm trying to do something similar to a function of sum of two lines but trying to get the difference between the two rows. Any help to solve this problem would be appreciated.Use the COLUMN FILTERS level...
the first column with the first variable of date quick presentation of the filter
Similarly, the second column in the second variable of quick overview of date filter
Kind regards
Rambeau -
Find the difference between two numbers (DBL)
Hi all
Is there a function in labview other than the subtraction function that can find the difference between the two numbers given?
Thank you
Davidson
-
Take the difference of two tables
Hello
I have two tables where in I need to take the difference between the two columns of different tables and show as decimal below:
Table A
Name, salary
x 10.5
y - 10.32
z 5
Table B
Name, salary
x 10.5
y - 10.32
z 3
a 12
Output:
Name_A, Name_B, salary, remarks
x, x, 0, no diff
y, y, 0, no diff
z, z, 2 Diff is here
, one, no data, no data from the previous
Hello
Try ythis:
with table_a as
(
SELECT 'X' NAME, SALARY, 10.5 DUAL UNION ALL
SELECT THE NAME OF 'Y',-10.32 SALARY OF DOUBLE UNION ALL
SELECT THE NAME OF 'Z', 5 DOUBLE SALARY
)
table_B as
(
SELECT 'X' NAME, SALARY, 10.5 DUAL UNION ALL
SELECT THE NAME OF 'Y',-10.32 SALARY OF DOUBLE UNION ALL
SELECT THE NAME OF 'Z', 3 DOUBLE UNION ALL SALARIES
SELECT 'A' NAME, SALARY 12 DUAL FROM
)
SELECT
COALESCE(A.NAME,B.NAME) NAME
, NVL (TO_CHAR (A.SALARY - B.SALARY), 'NO DATA') SALARY
, CASE WHEN A.SALARY - B.SALARY = 0 THEN 'NO DIFFERENCE '.
WHEN B.SID IS NULL, "NO DATA OF THE PREVIOUS.
WHERE B.NAME IS NULL, "NO DATA FROM NEXT.
ANOTHER 'DIFFERENCE IS THERE.
END NOTEOf
TABLE_A HAS
TABLE_B FULL OUTER JOIN B ON (B.SID = B.NAME)
;NAME SALARY NOTE
---- ---------------------------------------- ---------------------
X 0 NO DIFFERENCE
Y 0 NO DIFFERENCE
Z 2 THE DIFFERENCE IS THERE
A NUMBER OF DATA NO DATA FROM THE PREVIOUSKind regards
Peter
-
How to store the difference between two timestamps as a number?
Hello
I need to find the difference between 2 variables of timestamp and the result will be stored as a number in minutes?
as
declare
timestamp (7) of the fir_timestamp: = 1 January 2012 13:30 ';
timestamp (7) of the sec_timestamp: = 1 January 2012 14:00 ';
c number;
Start
c:=((sec_timestamp-fir_timestamp)/(24*60));
dbms_output.put_line (c);
end;962813 wrote:
declare-fir_timestamp timestamp (7): ='01 - jan - 2012 13:30 ';
timestamp (7) of the sec_timestamp: = 1 January 2012 14:00 '; Incorrect type declarationfir_timestamp timestamp: = 1st January 12 01.30.00.000000 PM';
sec_timestamp timestamp: = 1st January 12 02.00.00.000000 PM';
c number;
Start
c: = ABS ((extrait (HEURE de sec_timestamp) - extract (fir_timestamp TIME)) * 60) +.
ABS ((extrait (MINUTE de sec_timestamp) - extract (fir_timestamp MINUTE)));
dbms_output.put_line (' interval Min Total:-' | c);
end;
/
declare
*
ERROR on line 1:
ORA-01830: date format picture ends before converting all of the input string
ORA-06512: at line 6Follow what Paul has done...
In fact, you do not need timestamp, date data type is enough
SQL> declare 2 fir_timestamp date := 3 to_date('01-jan-2012 13:30:00','dd-mon-yyyy hh24:mi:ss'); 4 sec_timestamp date := 5 to_date('01-jan-2012 14:00:00','dd-mon-yyyy hh24:mi:ss'); 6 c number; 7 begin 8 c:= round((sec_timestamp-fir_timestamp)*24*60); 9 dbms_output.put_line(c); 10 end; 11 / 30 PL/SQL procedure successfully completed.
If you want to place on timestamp
SQL> declare 2 fir_timestamp timestamp := 3 to_timestamp('01-jan-2012 13:30:00','dd-mon-yyyy hh24:mi:ss'); 4 sec_timestamp timestamp := 5 to_timestamp('01-jan-2012 14:00:00','dd-mon-yyyy hh24:mi:ss'); 6 c number; 7 begin 8 c:= round(( 9 to_date(to_char(sec_timestamp,'ddmmyyyyhh24miss'), 10 'ddmmyyyyhh24miss')- 11 to_date(to_char(fir_timestamp,'ddmmyyyyhh24miss'), 12 'ddmmyyyyhh24miss') 13 )*24*60); 14 dbms_output.put_line(c); 15 end; 16 / 30
-
By selecting the difference between two images
Hello
I have two photos exactly the same thing that I took using a tripod, studio lighting and general conditions. However, in the second photo, I inserted a subject - in this case a sculpture complex. Photoshop can merge these two images together AND choose so the difference between the two images - in this case the sculpture complex?
Basically, I need to select the sculpture and do not want to spend time manually selecting due to its complexity. I need to separate the background and the sculpture for editing on their own layers.
Thank you
Stephen-CS3
You posted this in the two forums, its been answered in the mac forum.
-
How to calculate the difference between two times by the NUMBERS
I'm so bothered by the fact that I can't understand that.
Cell B2 - 08:00
Cell C2 - 10:50
(How can cell D2 - I get this cell to calculate the difference and say 02:50?)
I know it's probably one of the most basic operations, but for the life of me I can't understand it. The cells B2 and C2 are formatted for a 24-hour clock. But if I tell the system to just subtract the two, I get "0,118. Everything I find on the forum search goes beyond what I need. Can someone help me?
Thank you
Hi sapirs,
Departure and arrival of the cells are in Date and time with Date format: no and time: 24-hour clock.
Formula in D2 (fill down)
= C2−B2
The results become a duration format, but under automatic (numbers automatically worth this format)
If you wish, you can change the cells of lasting results.
What Data Format have your result cells?
Kind regards
Ian.
Maybe you are looking for
-
I tried to run mozilla firefox as always double click and it opens this time a pop came out asking me to select a user, I chose 1 on both I feel like I could have selected the wrong one miss me many of my bookmarks and things like that I don't know h
-
Why Firefox Crash everytime I open several tabs?
When I opened many tabs, Firefox always crashes. I just tried, updated Firefox and Windows, updated my plugins, tests for the crash in SafeMode. Still nothing works Crash ID: bp-2e11554a-1c25-4f94-84cc-9410a2130820
-
Short hard drive DST Check: failure
Could someone please explain these results, please. Here are the basics: Computer: HP 2000 OS: Windows 8 Problem: Short hard drive DST Check: failure Failure ID: Q0C5W3-6KU67W-MFGJWJ - 60T 203 Product ID: D1E81UA #ABA Thank you.
-
Error messages receivers dv6 HP Envy locations
Hello I don't know if it corresponds to the Commission, but I this will give a shot anyway. I've not had problems with my wifi until recently. When I visit some sites (main pages of blogs Tumblr for example), I got the dreaded message 503 Service una
-
Install expression Web SP2 remote
I am an admin of LAN and have 25 licensed copies of Expression Web 3 on workstations in my network. Is there a way to make it past the user 1st question, 'Do you want to install?' when you try to install Service pack 2? I use a Symantec product to