Cumulative sum
How to calculate a running sum, A = A + B, in Labview? I've seen some exaples of how to do it with process variables, a while loop and registers at offset. A loop time won't work in my application because it calculates the sum of each waiting period. Where I want to sum only when new orders X and are sent to a stepper motor controller.
The sums of X and Y will be used to show how an X and table Y went from a "Home" position.
Howard
Either a business structure or a selection function will work. The structure of the case is perhaps easier. Develop the structure of the case around the addition, with add it inside of the case of fake. In the case of true, connect the value that you add directly to the exit tunnel (not more). This way you can reset any value you want. The value to add will be outside the structure of the case, of course, and for maximum efficiency, it is also suitable for outside the while loop. If this is not clear, or you want someone to check your work, attach your VI. Make sure that you reset the first time you run the VI (or handle this within the race in summary VI by using the "First Call" function and OR the output with the reset entry).
Tags: NI Software
Similar Questions
-
Hello
I have generated a report, need to create the cumulative sum in my reports.can someone give me the solution how do.cummulative are like
col1 col2 col 3 (cummulative_sum)
A 5 5
B-10-15 (5 + 10)
15-30 (15 + 15) c
receive your answer.
Brgds,
GN
Published by: GN on January 31, 2012 03:48Hello
You can use ABSTRACT (Measure_Column).
Concerning
YoungNOTE - Please make this thread closed / or still facing issue so that she could help others.
-
find the cumulative sum of the previous columns
Hello
How can I get the cumulative sum of a particular column in the preceding lines in the current line.
e.g. I have a table produced,
Date | Orders
__________________
1 JANUARY 10 | 3
JANUARY 2, 10. 5
JANUARY 3, 10. 1
I want to select the date and orders between the 1st and the 3rd. Something like...
Select the Date, the orders for products where Date between to_date('1-JAN-10') and to_date('3-JAN-10')
But I want the output like this...
Date | Orders
__________________
1 JANUARY 10 | 0
JANUARY 2, 10. 3
JANUARY 3, 10. 8
Similarly, when I select it between 2 and 3, I want the output voltage...
Date | Orders
_________________
JANUARY 2, 10. 3
JANUARY 3, 10. 8
and so on. In the output, orders here are the cumulative sum of the previous columns.
Published by: eric clapton, November 8, 2010 20:45Hello
Use the analytical SUM function.
You want to filter by date after the cumulative SUM is calculated, so calculate the SUM in a subquery, then filter by date no later than:WITH got_cm_orders AS ( SELECT dt , orders , SUM (orders) OVER (ORDER BY dt) - orders AS cm_orders FROM products ) SELECT dt , orders WHERE dt BETWEEN DATE '2010-01-02' AND DATE '2010-01-03' ;
-
Cumulative sum of 3.1 to 6 1 and 1 to 9 and 1 to 11 lines
How to get the cumulative sum of follow-up records since of 1To 3.1 to 6 and 1 to 9 and 1 to 11
A sum (AVG) AVERAGE of BEG END TEACHER
--------------------------------------------------
1 0 0.1 159 159
2 0.1 0.2 159 168
3 0.2 0.3 179 159 486 (sum of lines 1 to 3)
4 0.1 0.2 250 300
5 0.2 0.3 320 250
6 0.4 0.3 250 380 1416 (sum of lines 1 to 6)
7 0.2 0.3 388 379
8 0.3 0.4 379 388
9 388 400 2583 0.5 0.4 (sum of lines 1 through 9)
10 1.5 0.6 499 500
11 420 448 3531 0.5 0.6 (sum of lines 1 to 11)
create table TABLEAA
(
A NUMBER,
PLEASE THE NUMBER,
NUMBER OF END,
NUMBER OF TEACHER,
AVERAGE NUMBER
)
;
Fast loading TABLEAA...
insert into TABLEAA (A, START, END, TEACHER, AVERAGE)
values (10, 1.5,.6,, 499, 500);
insert into TABLEAA (A, START, END, TEACHER, AVERAGE)
values (1, 0,.1, 159, 159);
insert into TABLEAA (A, START, END, TEACHER, AVERAGE)
values (2,.1,.2,, 159, 168);
insert into TABLEAA (A, START, END, TEACHER, AVERAGE)
values (3,.2,.3, 179, 159);
insert into TABLEAA (A, START, END, TEACHER, AVERAGE)
values (4,.1,.2, 250, 300);
insert into TABLEAA (A, START, END, TEACHER, AVERAGE)
values (5,.2,.3, 320, 250);
insert into TABLEAA (A, START, END, TEACHER, AVERAGE)
values (6,.3,.4,, 250, 380);
insert into TABLEAA (A, START, END, TEACHER, AVERAGE)
values (7,.2,.3, 388, 379);
insert into TABLEAA (A, START, END, TEACHER, AVERAGE)
values (8,.3,.4,, 379, 388);
insert into TABLEAA (A, START, END, TEACHER, AVERAGE)
values (9,.4,.5, 388, 400);
insert into TABLEAA (A, START, END, TEACHER, AVERAGE)
values (11.5.6, 420, 448);
commit;SQL> select t.*, case when mod ( row_number () over (order by a), 3 ) = 0 or a = last_value (a) over () then sum (average) over (order by a) end s from tableaa t order by a / A BEG END PROF AVERAGE S ---------- ---------- ---------- ---------- ---------- ---------- 1 0 ,1 159 159 2 ,1 ,2 159 168 3 ,2 ,3 179 159 486 4 ,1 ,2 250 300 5 ,2 ,3 320 250 6 ,3 ,4 250 380 1416 7 ,2 ,3 388 379 8 ,3 ,4 379 388 9 ,4 ,5 388 400 2583 10 1,5 ,6 499 500 11 ,5 ,6 420 448 3531 11 rows selected.
-
get the cumulative sum of the salaries of the employees of emp table
Hi gurus,
Can any body tell me how to get the cumulative sum of the salaries of the employees in the emp table using analytical functions.
Thanks in advance...Please read the document
http://download.Oracle.com/docs/CD/B19306_01/server.102/b14200/functions163.htm#sthref2186
Look for example at the bottom of the document.
-
Partition of cumulative sum of length
Hello
I'm working on a code to work around the limitation of wm_concat. Please consider the following data:
string_data
---------
AAAAA
BBB
CCC
DELAHAYE
EA
FFFFFF
GG
HARMAN
To this day, I have the following statement:
Sum (length (string_data)) (string_data order)
My current results are:
AAAAA 5
BBB 8
CCC 11
DDDDDDD 18
I want to do is be able to break once reached a certain length, say for example 12. So, I want to wm_concat on this particular window or a set of results. Example:
YYYY, BBB, CCC
DELAHAYE, EE
FFFFFF, GG
Is someone can please help me overcome this barrier?
Thank you very much.
Try this:
with the data as
(
Select "AAAAA" str in union double all the
Select "BBB-" of all the double union
Select "CCC" in all the double union
Select 'VAL' Union double all the
Select 'EE' of all the double union
Select 'FFFFFF' Union double all the
Select "GG" of all the double union
Select "HARMAN" double
)
SELECT MAX (new_str)
DE)
SELECT new_str, grp
FROM (SELECT * FROM data ORDER BY str)
DIMENSION of the MODEL BY (rn ROWNUM) measures (CAST (str AS VARCHAR2 (4000)) new_str, str, grp 0)
RULES)
new_str [any] order by rn = CASE WHEN CV (rn) > 1 AND LENGTH (new_str [cv () - 1] |) «, » || Str [CV ()])<=12 then="">=12>
Of ANOTHER str [cv ()]
END
GRP [any] = nvl (grp [cv () - 1], 0) + BOX WHEN new_str [cv ()] = str [cv ()] then 1 else 0 end
)
)
GROUP BY grp;
-
Hello
What can I do to obatain the net sum of these records
Thanks in advanceday net ------------------------------------------------ 01-03-12 00:00:00 41946,4 02-03-12 00:00:00 45263,82 03-03-12 00:00:00 64980,98 04-03-12 00:00:00 42695,22 05-03-12 00:00:00 29678,96 06-03-12 00:00:00 30537,88 07-03-12 00:00:00 31348,47 08-03-12 00:00:00 50076,46 09-03-12 00:00:00 45184,64 10-03-12 00:00:00 53773,22
-
Hello world
I have to make a running sum and I don't know how to in SQL.
This is my table:
Axis Line_order Line PK A 1 10 5 A 1 10 7 A 2 20 9 A 3 30 10 A 3 30 15 A 3 30 12 B 1 40 13 B 1 40 18 B 2 50 14 B 2 50 15 B 2 50 5 I have to do a cumulative sum of PK in the following order line (line_order) for each axis.
I have to me like this:
Axis Line_order Line PK Runsum_pk A 1 10 5 5 A 1 10 7 12 A 2 20 9 21 A 3 30 10 31 A 3 30 15 46 A 3 30 12 58 B 1 40 13 13 B 1 40 18 31 B 2 50 14 45 B 2 50 15 60 B 2 50 5 65 any suggestion?
Thank you for your help.
Hello
WITH tab1 AS (SELECT "A" axis, 1 Line_order, 10 Line, 5 Double PK UNION ALL
SELECT "A" 1, 10, 7 DOUBLE UNION ALL
SELECT "A" 2, 20, 9 DOUBLE UNION ALL
SELECT "A" 3, 30, 10 DOUBLE UNION ALL
SELECT "A" 3, 30, 15 DOUBLE UNION ALL
SELECT "A" 3, 30, 12 DOUBLE UNION ALL
SELECT 'B ',. 1, 40, 13 DOUBLE UNION ALL
SELECT 'B ',. 1, 40, 18 DOUBLE UNION ALL
SELECT 'B ',. 2, 50, 14 DOUBLE UNION ALL
SELECT 'B ',. 2, 50, 15 DOUBLE UNION ALL
SELECT 'B ',. 2, 50, 5 double), tab2 AS (SELECT ROWNUM rn, axis, Line_order, line, pk FROM tab1)
SELECT d.rn, d.Axis, d.Line_order, d.Line, d.pk, d.pk + nvl ((SELECT sum (b.pk) FROM tab2 b WHERE b.Axis = d.Axis and b.rn< d.rn),0)="">
of the tab2 d
Kind regards
Fame
-
Total cumulative peform Records
My requirement is to make the accumulated amount while they inspected the highest bonus.
Here are the files in the sample.
create the table test_cumsum as
(select 100 'id', 5 'bonus', 0.25 "CLTS', 'y' flg in union double all the)
Select 3, 200, 0.25, 'y' from dual union all
Select 300,1,0.15, 'y' from dual union all
Select 400,2,0.25, 'y' from dual union all
Select 500,6,0.25, 'y' in the double)
From the award-winning sum the CLTS hightest until the cumulative sum = 1
Records that are left in the running sum must be updated with flg = N
In the example above the SumOf CLTS for 6,5,3,2 bonus will be equal to 1
So record id = 300 must be updated to flg = N as long as this record needs no summation of the value to 1
Please suggest!
Could not test this carefully... but something like this may work. Test it with improved sample just to audit data.
----------
SELECT "id", "bonus", "crdts", CASE WHEN SUM ( "crdts") OVER (PARTITION BY 1 ORDER BY "bonus" DESC ROWS UNBOUNDED PRECEDING) <= 1 THEN 'Y' ELSE 'N' END flg FROM test_cumsum;
ID bonus CLTS FLG 500 6 0.25 THERE 100 5 0.25 THERE 200 3 0.25 THERE 400 2 0.25 THERE 300 1 0.15 N p.s. Please name the columns without quotation marks double... its just pain
See you soon,.
Manik.
-
How to add items to a table 1 d with each iteration?
Hello
I have a 3 loop iteration For which gives a table of 5 elements after his execution. At each iteration of the loop, how can I add each item to its previous value to form a final picture of the cumulative sum of the parts? For example:
Array of values for 1st iteration: [A, B, C, D, E]
Array of values for 2nd iteration: [F, G, H, I, J]
Array of values for the 3rd iteration: [K, L, M, N, O]
How can I make the Final table being a cumulative amount of IE: [(A + F + K), (L + B + G), (C + H + M) (D + I + N) (E + J + O)]?
Your help will be apreciated, thanks!
The Add function is polymorphic. So, if you give 1 2 tables you will get a table that corresponds to the sum of each item. With a loop, you must use a node registry or feedback shift to keep track of the sum of the currents.
For example:
-
Hello
I want to generate a vector that is the cumulative sum of another vector without using a loop. My vector is more than 10 ^ 6 length and a loop takes forever. I use cumsum in matlab, but could not find something similar in labview.
Thank you!
It works for a 1 d of 1 million items table... you need to mod a little for a 2d array but it takes hardly any time at all to run. You must have an inefficiency in your code. If you make columns or lines, I can mod a bit for you, but you should try it on your own first using this example.
-
Valid time intervals: two tables intersect documents
Benefits:
I have two tables:
AVAILABILITY (ALLOCATION A_ID, START_TIME, END_TIME, ID_RESSOURCE)
TASK (T_ID, START_TIME, END_TIME, ID_RESSOURCE)
My final request should print:
Id_ressource, DAY_OF_WEEK, MYDATE, DURATION (in hours)
Semantics back: "give me all the time slots available; Time slot available to the general public is the time range that does not contain a task"
1. in the tables above START_TIME, END_TIME are of type DATE and they contain a timestamp that is to say:
SELECT to_char (START_TIME, 'HH24 MMDDYYYY') from the AVAILABILITY/TASK
would print something like
09232014 14:17
2. in the tables above time START_TIME and END_TIME are of the same date and END_TIME > START_TIME IE
START_TIME = 09232014 14:17
END_TIME = 09232014 15:17
no need to check that
3. If for some date there are TASK BOTH records and AVAILABILITY, then it must be:
TASK. End_time < = AVAILABILITY. End_time and TASK. Start_time = > AVAILABILITY. START_TIME
In other words, JOB registration is still "inside" free and BUSY folder
I need time slots which are essentially output
-All available records that do not contain a ' ' tasks.
AVAILABILITY. Id_ressource, to_char (AVAILABILITY. Start_time, 'DAY') as DAY_OF_WEEK, AVAILABILITY. Start_time as MYDATE, (AVAILABILITY. END_TIME-AVAILABILITY. Start_time) * 24 as DURATION
AND
-If the free and busy folder contains task (see 3) then there are 2 two time intervals resulting (Yes the duration can be 0)
AVAILABILITY. Id_ressource, to_char (AVAILABILITY. Start_time, 'DAY') as DAY_OF_WEEK, AVAILABILITY. Start_time as MYDATE, (TASK. START_TIME-AVAILABILITY. Start_time) * 24 as DURATION
and
AVAILABILITY. Id_ressource, to_char (AVAILABILITY. Start_time, 'DAY') as DAY_OF_WEEK, AVAILABILITY. Start_time as MYDATE, (AVAILABILITY. END_TIME-TASK. End_time) * 24 as DURATION
Hope the above makes sense. What is the best, more rapid SQL?
Hello
Here's a way to do it:
WITH union_data AS
(
SELECT id_ressource, change_time, change_val
AVAILABILITY
UNPIVOT (change_time
FOR change_val IN (start_time AS 1
end_time AS - 1
)
)
UNION ALL
SELECT id_ressource, change_time, change_val
TASK
UNPIVOT (change_time
FOR change_val IN (start_time AS 1
end_time AS - 1
)
)
)
got_change_sum AS
(
SELECT id_ressource
change_time
SUM (change_val) OVER (PARTITION BY id_ressource
ORDER BY change_time
) AS change_sum
Advance (change_time) OVER (PARTITION BY id_ressource
ORDER BY change_time
) - change_time AS long
Of union_data
)
SELECT id_ressource
, TO_CHAR (change_time, 'fmDay, FMMM-DD-YYYY') AS available_date
Duration * 24 AS available_hours
OF got_change_sum
WHERE change_sum = 1
ORDER BY id_ressource
change_time
;
To see how it works, view the results of each auxiliary request individually.
You will see that the union_data product has all the points where either avaialablity or a task changes. The column change_val is + 1 availability or a task at the beginning and - 1, when it ends. When the cumulative sum of those is 0, this means that there is no availability. When the accumulated amount is > 1, this means a task is underway. We are interested in the places where the cumulative sum of change_val is exactly 1, sense that a period which started (but not yet completed) and that there is a net 0 current tasks.
This solution is NOT the value of start_time and end_time in the same day of calendar and tasks for the same resource may overlap.
-
Insert table when missing data
Hello
I have the following table, for readability I cracked the after each manager for each file number. The last column is the cumulative sum of the second last column. Value for month should ideally go 1 - 3 (as we see in both cases to Chicago). But the table, you can see in some cases, some entries are missing (marked by <-).
CITY CASE_NUMBER CASE MANAGER MONTHS MONTHLY_TOTAL FISCAL_TOTAL
---------------------------------------------------------------------------
Chicago case_1 1 John 1 2 2
Chicago case_1 1 John 2 3 5
Chicago case_1 1 John 3 5 10
Chicago case_1 Jeff 1 4 4 1
Chicago case_1 Jeff 2 2 6 1
Chicago case_1 Jeff 3 3 9 1
Chicago case_2 John 2 1 3 3
Chicago case_2 John 2 2 2 5
Chicago case_2 John 2 3 4 9
Chicago case_2 Jeff 2 1 2 2
Chicago Jeff 2 2 7 9 case_2 < -.
NewYork case_1 1 Lee 1 3 3
NewYork case_1 Lee 2 4 7 1 < -.
case_1 NewYork 1 Sue 1 2 2
case_1 NewYork 1 Sue 2 3 5
case_1 NewYork 1 Sue 3 2 7
NewYork case_1 Lee 2 1 2 2
NewYork case_1 Lee 2 2 4 6
NewYork case_1 Lee 2 3 4 10
NewYork case_1 Sue 1 3 3 2
NewYork case_1 2 Sue 2 2 5 < -.
What I want is first find the missing lines and insert values. To find those missing monthly_total = 0
fiscal_total = value of the previous row. For example, for the missing first line should be:
CITY CASE_NUMBER CASE MANAGER MONTHS MONTHLY_TOTAL FISCAL_TOTAL
---------------------------------------------------------------------------
Chicago case_2 2 3 0 9 Jeffwith t1 as ( select case_number, max(month) month_count from tbl group by case_number ), t2 as ( select case_number, column_value month from t1, table( cast( multiset( select level from dual connect by level <= month_count ) as sys.OdciNumberList ) ) ) select max(city) over(partition by t2.case_number,manager) city, max(case) over(partition by t2.case_number) case, t2.case_number, t.manager manager, t2.month month, nvl(monthly_total,0) monthly_total, last_value(fiscal_total ignore nulls) over(partition by t2.case_number,manager order by t2.month) fiscal_total from tbl t partition by(manager) right join t2 on ( t2.case_number = t.case_number and t2.month = t.month ) order by t2.case_number, manager, month / CITY CASE CASE_NUMBER MANA MONTH MONTHLY_TOTAL FISCAL_TOTAL ------- ------ ----------- ---- ---------- ------------- ------------ chicago case_1 1 Jeff 1 4 4 chicago case_1 1 Jeff 2 2 6 chicago case_1 1 Jeff 3 3 9 chicago case_1 1 John 1 2 2 chicago case_1 1 John 2 3 5 chicago case_1 1 John 3 5 10 newyork case_1 1 Lee 1 3 3 newyork case_1 1 Lee 2 4 7 newyork case_1 1 Lee 3 0 7 <-- missing row newyork case_1 1 Sue 1 2 2 newyork case_1 1 Sue 2 3 5 CITY CASE CASE_NUMBER MANA MONTH MONTHLY_TOTAL FISCAL_TOTAL ------- ------ ----------- ---- ---------- ------------- ------------ newyork case_1 1 Sue 3 2 7 chicago case_2 2 Jeff 1 2 2 chicago case_2 2 Jeff 2 7 9 chicago case_2 2 Jeff 3 0 9 <-- missing row chicago case_2 2 John 1 3 3 chicago case_2 2 John 2 2 5 chicago case_2 2 John 3 4 9 newyork case_2 2 Lee 1 2 2 newyork case_2 2 Lee 2 4 6 newyork case_2 2 Lee 3 4 10 newyork case_2 2 Sue 1 3 3 CITY CASE CASE_NUMBER MANA MONTH MONTHLY_TOTAL FISCAL_TOTAL ------- ------ ----------- ---- ---------- ------------- ------------ newyork case_2 2 Sue 2 2 5 newyork case_2 2 Sue 3 0 5 <-- missing row 24 rows selected. SQL>
SY.
-
Hi all
I have two requests and I want to join this two query
The column of the report should be like this
1st requestitem_number WK_30 WE_31
2nd requestselect re.item_number, nvl(le.quantity,0) - nvl(re.quantity,0) WK_30 from BACKLOG_WEEK_WH_AFTR_ATP le, BACKLOG_ATP_GT_CW_IN re where le.item_number =re.item_number and to_number(substr(re.year_week,-2,2)) = to_number(to_char(sysdate,'IW'))+1
Thanks in advanceselect re.item_number, nvl(le.quantity,0) - nvl(re.quantity,0) WK_31 from BACKLOG_WEEK_WH_AFTR_ATP le, BACKLOG_ATP_GT_CW_IN re where le.item_number =re.item_number and to_number(substr(re.year_week,-2,2)) = to_number(to_char(sysdate,'IW'))+2
ConcerningHello
You are welcome.
I think that the best way to understand that is to show what data is generated at each stage...
1. we need to generate a list of lines that have every week, we are interested in swing on...
( SELECT to_number(to_char(sysdate,'IW')) + ROWNUM year_week_num FROM DUAL CONNECT BY LEVEL <= 5 ) row_gen YEAR_WEEK_NUM ------------- 30 31 32 33 34
2. must be added BACKLOG_WEEK_WH_AFTR_ATP lines in the calculations for the first week in the report
SELECT le.item_number, le.quantity, to_number(to_char(sysdate,'IW'))+1 year_week_num FROM BACKLOG_WEEK_WH_AFTR_ATP le UNION ALL SELECT re.item_number, -re.quantity, to_number(substr(re.year_week,-2,2)) year_week_num FROM BACKLOG_ATP_GT_CW_IN re / ITEM_NUMBE QUANTITY YEAR_WEEK_NUM ---------- ---------- ------------- ITEM_1 200 30 ITEM_2 600 30 ITEM_1 -200 30 ITEM_1 -100 33 ITEM_2 -300 30 ITEM_2 -200 32 ITEM_3 -800 30 ITEM_3 -400 34
3. we must now repeat weekly, generated by the request of row_gen against all of the item_numbers returned by the above query and match them if possible to get the amount. Where there is no entry in BACKLOG_WEEK_WH_AFTR_ATP or BACKLOG_ATP_GT_CW_IN for a number of the week, we should use 0 as the quantity. The Partition Outer Join does for us.
SQL> select 2 re.item_number, 3 row_gen.year_week_num, 4 NVL(re.quantity,0) qty 5 from 6 ( SELECT 7 to_number(to_char(sysdate,'IW')) + ROWNUM year_week_num 8 FROM 9 DUAL 10 CONNECT BY LEVEL <= 5 11 ) row_gen LEFT OUTER JOIN 12 ( SELECT 13 le.item_number, 14 le.quantity, 15 to_number(to_char(sysdate,'IW'))+1 year_week_num 16 FROM 17 BACKLOG_WEEK_WH_AFTR_ATP le 18 UNION ALL 19 SELECT 20 re.item_number, 21 -re.quantity, 22 to_number(substr(re.year_week,-2,2)) year_week_num 23 FROM 24 BACKLOG_ATP_GT_CW_IN re 25 ) re 26 PARTITION BY (re.item_number) 27 ON ( row_gen.year_week_num = re.year_week_num) 28 / ITEM_NUMBE YEAR_WEEK_NUM QTY ---------- ------------- ---------- ITEM_1 30 200 ITEM_1 30 -200 ITEM_1 31 0 ITEM_1 32 0 ITEM_1 33 -100 ITEM_1 34 0 ITEM_2 30 -300 ITEM_2 30 600 ITEM_2 31 0 ITEM_2 32 -200 ITEM_2 33 0 ITEM_2 34 0 ITEM_3 30 -800 ITEM_3 31 0 ITEM_3 32 0 ITEM_3 33 0 ITEM_3 34 -400 17 rows selected.
4. now, we have the base dataset that we need - she has all the amounts with the right directions so that we can simply add everything up as a sum of sumulative. That's what makes OVER(PARTITION BY re.item_number ORDER BY row_gen.year_week_num) SUM (NVL(re.quantity,0)) bit. He said baseically are all lines seen so far in the result set for each item number...
select re.item_number, row_gen.year_week_num, NVL(re.quantity,0) qty, SUM(NVL(re.quantity,0)) OVER(PARTITION BY re.item_number ORDER BY row_gen.year_week_num) quantity from ( SELECT to_number(to_char(sysdate,'IW')) + ROWNUM year_week_num FROM DUAL CONNECT BY LEVEL <= 5 ) row_gen LEFT OUTER JOIN ( SELECT le.item_number, le.quantity, to_number(to_char(sysdate,'IW'))+1 year_week_num FROM BACKLOG_WEEK_WH_AFTR_ATP le UNION ALL SELECT re.item_number, -re.quantity, to_number(substr(re.year_week,-2,2)) year_week_num FROM BACKLOG_ATP_GT_CW_IN re ) re PARTITION BY (re.item_number) ON ( row_gen.year_week_num = re.year_week_num) / ITEM_NUMBE YEAR_WEEK_NUM QTY QUANTITY ---------- ------------- ---------- ---------- ITEM_1 30 200 0 ITEM_1 30 -200 0 ITEM_1 31 0 0 ITEM_1 32 0 0 ITEM_1 33 -100 -100 ITEM_1 34 0 -100 ITEM_2 30 -300 300 ITEM_2 30 600 300 ITEM_2 31 0 300 ITEM_2 32 -200 100 ITEM_2 33 0 100 ITEM_2 34 0 100 ITEM_3 30 -800 -800 ITEM_3 31 0 -800 ITEM_3 32 0 -800 ITEM_3 33 0 -800 ITEM_3 34 -400 -1200
5. we can now rotate these data in columns - however, there is a small problem. For points 1 and 2 we have 2 lines for the week 30, running in the quantity column total is the same for both because the two lines appear at the same point in the game as defined by the order by clause. This means before rotate us, we must select one of the lines - or the other will do, they are both correct. If we do not have, the effect will be to double the cumulative sum (for point 1 is 0, so it does not appear) for this, we can use the ROW_NUMBER function...
select re.item_number, row_gen.year_week_num, NVL(re.quantity,0) qty, SUM(NVL(re.quantity,0)) OVER(PARTITION BY re.item_number ORDER BY row_gen.year_week_num) quantity, ROW_NUMBER() OVER(PARTITION BY re.item_number, row_gen.year_week_num ORDER BY NULL) rn from ( SELECT to_number(to_char(sysdate,'IW')) + ROWNUM year_week_num FROM DUAL CONNECT BY LEVEL <= 5 ) row_gen LEFT OUTER JOIN ( SELECT le.item_number, le.quantity, to_number(to_char(sysdate,'IW'))+1 year_week_num FROM BACKLOG_WEEK_WH_AFTR_ATP le UNION ALL SELECT re.item_number, -re.quantity, to_number(substr(re.year_week,-2,2)) year_week_num FROM BACKLOG_ATP_GT_CW_IN re ) re PARTITION BY (re.item_number) ON ( row_gen.year_week_num = re.year_week_num) / ITEM_NUMBE YEAR_WEEK_NUM QTY QUANTITY RN ---------- ------------- ---------- ---------- ---------- ITEM_1 30 200 0 1 ITEM_1 30 -200 0 2 ITEM_1 31 0 0 1 ITEM_1 32 0 0 1 ITEM_1 33 -100 -100 1 ITEM_1 34 0 -100 1 ITEM_2 30 -300 300 1 ITEM_2 30 600 300 2 ITEM_2 31 0 300 1 ITEM_2 32 -200 100 1 ITEM_2 33 0 100 1 ITEM_2 34 0 100 1 ITEM_3 30 -800 -800 1 ITEM_3 31 0 -800 1 ITEM_3 32 0 -800 1 ITEM_3 33 0 -800 1 ITEM_3 34 -400 -1200 1
6. so now that we have a way to select one of the duplicate lines, we can move forward a pivot data by ensuring that us choose only 'first' line for each element for each week...
SELECT item_number, SUM ( CASE WHEN year_week_num = to_number(to_char(sysdate,'IW'))+1 THEN quantity END ) plus_1, SUM ( CASE WHEN year_week_num = to_number(to_char(sysdate,'IW'))+2 THEN quantity END ) plus_2, SUM ( CASE WHEN year_week_num = to_number(to_char(sysdate,'IW'))+3 THEN quantity END ) plus_3, SUM ( CASE WHEN year_week_num = to_number(to_char(sysdate,'IW'))+4 THEN quantity END ) plus_4, SUM ( CASE WHEN year_week_num = to_number(to_char(sysdate,'IW'))+5 THEN quantity END ) plus_5 FROM ( select re.item_number, row_gen.year_week_num, SUM(NVL(re.quantity,0)) OVER(PARTITION BY re.item_number ORDER BY row_gen.year_week_num) quantity, ROW_NUMBER() OVER(PARTITION BY re.item_number, row_gen.year_week_num ORDER BY NULL) rn from ( SELECT to_number(to_char(sysdate,'IW')) + ROWNUM year_week_num FROM DUAL CONNECT BY LEVEL <= 5 ) row_gen LEFT OUTER JOIN ( SELECT le.item_number, le.quantity, to_number(to_char(sysdate,'IW'))+1 year_week_num FROM BACKLOG_WEEK_WH_AFTR_ATP le UNION ALL SELECT re.item_number, -re.quantity, to_number(substr(re.year_week,-2,2)) year_week_num FROM BACKLOG_ATP_GT_CW_IN re ) re PARTITION BY (re.item_number) ON ( row_gen.year_week_num = re.year_week_num) ) WHERE rn = 1 GROUP BY item_number
You need not add a join between BACKLOG_WEEK_WH_AFTR_ATP and BACKLOG_ATP_GT_CW_IN, because we are all summed up in the article number and all item numbers, we have selected two tables. The aggregation ensures that the quantities are added together against the item number.
HTH
David
-
create a rollup "closing balance.
Hi gurus,
I have the following table:
YEAR_MONTH | New | Solved
====================
2011-07 49 20
2011-06, 153, 115
2011-05 194 153
I wish I had a field this automatic sum of the "closing balance sheet. Here are my results:
YEAR_MONTH | New | Solved | Acc_closing_bal
====================
2011-07 49 20 108
2011-06 153 115 79
2011-05 194 153 41
The "acc_closing_bal" field should be calculated based on the sum of all current + previous YEAR_MONTH (New - resolved). How can I achieve this?
Thank youThis can be useful
WITH T AS ( SELECT '2011-07' YEAR_MONTH, 49 New , 20 Resolved FROM DUAL UNION SELECT '2011-06', 153, 115 FROM DUAL UNION SELECT '2011-05', 194, 153 FROM DUAL ) SELECT YEAR_MONTH, New, Resolved, SUM(NEW-Resolved) OVER (ORDER BY ROWNUM) Acc_closing_bal FROM T order by 1 desc
See also this
http://nimishgarg.blogspot.com/2010/02/Oracle-getting-cumulative-sum-using.htmlEdited by: Caroline Geffroy July 11, 2011 12:37
Maybe you are looking for
-
My HP pavilion tried to update and then failed, and after several times trying to restore it, it is now said auto repair on the screen and goes to a black screen. It does not at all and I do not know if it had a warranty since I bought to someone I d
-
I'm about to buy DELL S2240L. Before that, I need to know i. port HDMI HDCP is not consistent? II. the full performance of the monitor HD movie! Can III. I connect the monitor via HDMI for Set Top Box to watch TV Please help as soon as possible Ranja
-
I have a monitor of k 4 with resolution of 3840 x 2160... TEXT is too small in dreamweaver which makes it unusable... I'm not ready to change my resolution everytime I want to use dreamweaver so wondering how other people handle or is there a solutio
-
Button to reset the values of form works, but I can't label.
I added a button to reset my form fields empty when the button is clicked and it works great however, I can't put a label on the button that says "reset". Anyone know how I can tag my button to reset?
-
I need help to write a custom calculation. That's what I need: I have four boxes (Tone4, Tone1, Tone3, Tone2). Each box is worth its value (ie. If Tone4 is activated, it should give me 4 points). How can I write a script that will give me the righ