how to set x-axis label as fixed in birt report - birt
am currently doing a report with chart so in that i had data which are in databases only showing ..but my condition is to fix label as constant then only if wt ever data in databases it will show according to label.....i had tried by to uncheck a iscategories its not satisfied my condition ..
for example:
if am having data in database showing a month so in that am having data only for april,june,dec it only showing in categories axis
but condition is to fix label as like jan,feb,mar,april,june,july,aug,sep,oct,nov,dec.....
is it possible by some script?
Me too face the same problem but what i did is,i have select data for each and every month of the year so that if a value/data available for april,june,dec it will return the corresponding value/data otherwise it will return zero for unavailable month.
select 0,0,0,0,DATE_FORMAT(DATE_ADD(curdate(),INTERVAL -7 DAY),'%m/%d/%Y')
UNION
select 0,0,0,0,DATE_FORMAT(DATE_ADD(curdate(),INTERVAL -14 DAY),'%m/%d/%Y')
UNION
select 0,0,0,0,DATE_FORMAT(DATE_ADD(curdate(),INTERVAL -21 DAY),'%m/%d/%Y')
UNION
select 0,0,0,0,DATE_FORMAT(DATE_ADD(curdate(),INTERVAL -28 DAY),'%m/%d/%Y')
UNION
select 0,0,0,0,DATE_FORMAT(DATE_ADD(curdate(),INTERVAL -35 DAY),'%m/%d/%Y')
UNION
select 0,0,0,0,DATE_FORMAT(DATE_ADD(curdate(),INTERVAL -42 DAY),'%m/%d/%Y')
UNION
select 0,0,0,0,DATE_FORMAT(DATE_ADD(curdate(),INTERVAL -49 DAY),'%m/%d/%Y')
UNION
select 0,0,0,0,DATE_FORMAT(DATE_ADD(curdate(),INTERVAL -56 DAY),'%m/%d/%Y')
UNION
select 0,0,0,0,DATE_FORMAT(DATE_ADD(curdate(),INTERVAL -63 DAY),'%m/%d/%Y')
UNION
select 0,0,0,0,DATE_FORMAT(DATE_ADD(curdate(),INTERVAL -70 DAY),'%m/%d/%Y')
UNION
select 0,0,0,0,DATE_FORMAT(DATE_ADD(curdate(),INTERVAL -77 DAY),'%m/%d/%Y')
UNION
select 0,0,0,0,DATE_FORMAT(DATE_ADD(curdate(),INTERVAL -84 DAY),'%m/%d/%Y')
UNION
select 0,0,0,0,DATE_FORMAT(DATE_ADD(curdate(),INTERVAL -91 DAY),'%m/%d/%Y')
Here i have select the query for last 3 months in weeks
Related
PL/SQL program using CURSOR for frequency distribution in table
finaltableA has two columns WORDS, WCOUNTS. The program should insert every word of intitaltableA into finaltableA exactly once. In the column WCOUNTS the program should put how often the word occurs. intitaltableA COVID is a disease COVID can be treated with antibodies COVID is a serious disease there is a vaccination available for COVID finaltableA should look like this - WORDS WCOUNTS a 3 antibodies 1 available 1 be 1 can 1 COVID 4 disease 2 for 1 is 3 serious 1 there 1 treated 1 vaccination 1 with 1 I should use a cursor to insert and update the table. I am new to PL/SQL.
It is quite obvious that you can do this without any cursor in PLSQL, so I guess that means that you are trying to solve a homework problem or a training question. Anyway, here you can see two simple options to get the result you want, with and without PLSQL. Option 1 - Without PLSQL with x ( words ) as ( select 'COVID' from dual union all select 'is' from dual union all select 'a' from dual union all select 'disease' from dual union all select 'COVID' from dual union all select 'can' from dual union all select 'be' from dual union all select 'treated' from dual union all select 'with' from dual union all select 'antibodies' from dual union all select 'COVID' from dual union all select 'is' from dual union all select 'a' from dual union all select 'serious' from dual union all select 'disease' from dual union all select 'there' from dual union all select 'is' from dual union all select 'a' from dual union all select 'vaccination' from dual union all select 'available' from dual union all select 'for' from dual union all select 'COVID' from dual ) select words, count(words) as counter from x group by words order by 2 desc; If you execute it, it gives you the output you want SQL> with x ( words ) 2 as 3 ( 4 select 'COVID' from dual union all 5 select 'is' from dual union all 6 select 'a' from dual union all 7 select 'disease' from dual union all 8 select 'COVID' from dual union all 9 select 'can' from dual union all 10 select 'be' from dual union all 11 select 'treated' from dual union all 12 select 'with' from dual union all 13 select 'antibodies' from dual union all 14 select 'COVID' from dual union all 15 select 'is' from dual union all 16 select 'a' from dual union all 17 select 'serious' from dual union all 18 select 'disease' from dual union all 19 select 'there' from dual union all 20 select 'is' from dual union all 21 select 'a' from dual union all 22 select 'vaccination' from dual union all 23 select 'available' from dual union all 24 select 'for' from dual union all 25 select 'COVID' from dual 26 ) 27 select words, count(words) as counter 28 from x 29 group by words 30* order by 2 desc SQL> / WORDS COUNTER ----------- ---------- COVID 4 is 3 a 3 disease 2 there 1 available 1 for 1 serious 1 antibodies 1 can 1 vaccination 1 WORDS COUNTER ----------- ---------- treated 1 be 1 with 1 14 rows selected. Option 2 - Using PLSQL and a CURSOR In the below example, I'm going to use dbms_output to show the results. Keep in mind that here there are dozens of ways to do the same, I am just using the simplest one I can think of. SQL> create table t ( words varchar2(40) ) ; Table created. SQL> insert into t 2 with x ( words ) 3 as 4 ( 5 select 'COVID' from dual union all 6 select 'is' from dual union all 7 select 'a' from dual union all 8 select 'disease' from dual union all 9 select 'COVID' from dual union all 10 select 'can' from dual union all 11 select 'be' from dual union all 12 select 'treated' from dual union all 13 select 'with' from dual union all 14 select 'antibodies' from dual union all 15 select 'COVID' from dual union all 16 select 'is' from dual union all 17 select 'a' from dual union all 18 select 'serious' from dual union all 19 select 'disease' from dual union all 20 select 'there' from dual union all 21 select 'is' from dual union all 22 select 'a' from dual union all 23 select 'vaccination' from dual union all 24 select 'available' from dual union all 25 select 'for' from dual union all 26 select 'COVID' from dual 27* ) select words from x SQL> / 22 rows created. SQL> commit ; Commit complete. SQL> declare 2 begin 3 for i in ( select words, count(words) as counter from t group by words order by 2 desc ) 4 loop 5 dbms_output.put_line( 'Words: '||i.words||' - Wcount is: '||i.counter||' '); 6 end loop; 7* end; SQL> / Words: COVID - Wcount is: 4 Words: is - Wcount is: 3 Words: a - Wcount is: 3 Words: disease - Wcount is: 2 Words: antibodies - Wcount is: 1 Words: for - Wcount is: 1 Words: be - Wcount is: 1 Words: vaccination - Wcount is: 1 Words: can - Wcount is: 1 Words: available - Wcount is: 1 Words: treated - Wcount is: 1 Words: there - Wcount is: 1 Words: with - Wcount is: 1 Words: serious - Wcount is: 1 PL/SQL procedure successfully completed.
Duplicated rows numbering
I need to number the rows so that the row number with the same ID is the same. For example: Oracle database. Any ideas?
Use the DENSE_RANK analytic function: SELECT DENSE_RANK() OVER (ORDER BY id) AS row_number, id FROM your_table Which, for the sample data: CREATE TABLE your_table ( id ) AS SELECT 86325 FROM DUAL UNION ALL SELECT 86325 FROM DUAL UNION ALL SELECT 86326 FROM DUAL UNION ALL SELECT 86326 FROM DUAL UNION ALL SELECT 86352 FROM DUAL UNION ALL SELECT 86353 FROM DUAL UNION ALL SELECT 86354 FROM DUAL UNION ALL SELECT 86354 FROM DUAL; Outputs: ROW_NUMBER ID 1 86325 1 86325 2 86326 2 86326 3 86352 4 86353 5 86354 5 86354 db<>fiddle here
Oracle Apex Pivot sorting
I have an interactive report, which using Pivot, but I was trying to custom sort the report by row column of pivot "Age Group", but I couldn't. I need this report in such this sorting: How I can do that? Thanks
Looks like you'd want to sort by the first digit(s), and then by age_group itself (as a string). Something like this (sample data in lines #1 - 10; query you might be interested in begins at line #11): SQL> with test (age_group) as 2 (select 'wahine 45-64' from dual union all 3 select 'wahine 25-44' from dual union all 4 select 'rangtahi 15-24' from dual union all 5 select 'pepis 0_4' from dual union all 6 select 'pakeke 45-64' from dual union all 7 select 'pakeke 25-44' from dual union all 8 select 'N/A' from dual union all 9 select 'kuia 65+' from dual 10 ) 11 select age_group 12 from test 13 order by to_number(regexp_substr(age_group, '\d+')), age_group; AGE_GROUP -------------- pepis 0_4 rangtahi 15-24 pakeke 25-44 wahine 25-44 pakeke 45-64 wahine 45-64 kuia 65+ N/A 8 rows selected. SQL>
How to use the query builder of Symfony to make a date range counter and fill the gaps with zeros
I have a query that count the user by grouping them by sign up date. return $this->createQueryBuilder('s') ->select(' date(s.created_at) as x, count(1) as y') ->where("s.created_at between datesub(now(), :months, 'Month') and now()") ->setParameter('months', $months) ->groupBy('x') ->orderBy('x') ->getQuery() ->getResult(); But their is currently gaps in my dataset. So I have the sql request to fill the gaps, but I don't know how to create a complicated request with the Symfony's query builder. SELECT ranger.ranger_date AS x, COALESCE(counter.counter_value, 0) as y FROM ( SELECT DATE(s.created_at) AS counter_date, count(*) AS counter_value FROM statistic AS s WHERE s.created_at between DATE_SUB(NOW(), INTERVAL 3 MONTH) and now() GROUP BY counter_date ) AS counter RIGHT JOIN ( SELECT DATE(DATE_SUB(NOW(), INTERVAL units.i + tens.i * 10 + hundreds.i * 100 DAY)) AS ranger_date FROM (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)units CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)tens CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)hundreds WHERE DATE_SUB(NOW(), INTERVAL units.i + tens.i * 10 + hundreds.i * 100 DAY) BETWEEN DATE_SUB(NOW(), INTERVAL 3 MONTH) AND NOW() ) AS ranger ON ranger.ranger_date = counter.counter_date ORDER BY ranger.ranger_date I have already tried with the createQuery method, but it did not work...
If your complex native sql query is successfully returning the result set you want: You can simply prepare and execute the query as documented by Symfony. If you need to hydrate entities then you can use the NativeQuery class.
How to breakdown data by month and showing zero for months with no data?
Using information in Table A, how can I produce results in Table B below? Table A: CASE_ID DATE_EFF COPAY STATUS 1 11/04/2016 10 A 1 11/20/2016 5 A 1 11/23/2016 5 R 1 12/01/2016 1 A 1 12/10/2016 2 A 1 12/12/2016 10 A 1 12/31/2016 50 R For the above CASE_ID, we have dates in Nov 2016 and Dec 2016 only, however, I want to produce a breakdown of this CASE_ID for a period of 6 months as below where for each month the copays are summed where applicable as per the DATE_EFF and for the months that are not within the above dates, a zero is entered. Also, only records with copays with a status of 'A' are summed for any month -- so those with status of 'R' are ignored in the summation. For example, based on data in Table A above, the intended results are as follow: Table B: CASE_ID MONTH TOTAL_COPAY 1 01/2017 0 1 12/2016 13 1 11/2016 15 1 10/2016 0 1 09/2016 0 1 08/2016 0 I have below as a possible solution[using a with clause], but can this be achieved without the use of the 'with' clause? Possible Solution: WITH XRF AS ( SELECT CASE_ID, COPAY, DATE_EFF FROM Table_A WHERE STATUS = 'A' ) SELECT F.CASE_ID, ST, NVL(SUM(F.COPAY),0) TOTAL_COPAY FROM XRF F PARTITION BY (F.CASE_ID) RIGHT OUTER JOIN (SELECT '12/2016' ST FROM DUAL UNION ALL SELECT '11/2016' FROM DUAL UNION ALL SELECT '10/2016' FROM DUAL UNION ALL SELECT '09/2016' FROM DUAL UNION ALL SELECT '08/2016' FROM DUAL UNION ALL SELECT '07/2016' FROM DUAL) STS ON (TO_CHAR(LAST_DAY((F.DATE_EFF)),'MM/YYYY') = STS.ST) GROUP BY F.CASE_ID, ST ORDER BY F.CASE_ID, ST DESC ; UPDATE AND SOLUTION: Using the above query, I believe I am have answered my own question by implementing it as below -- not sure though if using this method is expensive when you have millions of records of such CASE_IDs. Any thoughts? SELECT F.CASE_ID, ST, NVL(SUM(F.COPAY),0) TOTAL_COPAY FROM (SELECT CASE_ID, COPAY, DATE_EFF FROM TABLE_A WHERE STATUS = 'A') F PARTITION BY (F.CASE_ID) RIGHT OUTER JOIN (SELECT '12/2016' ST FROM DUAL UNION ALL SELECT '11/2016' FROM DUAL UNION ALL SELECT '10/2016' FROM DUAL UNION ALL SELECT '09/2016' FROM DUAL UNION ALL SELECT '08/2016' FROM DUAL UNION ALL SELECT '07/2016' FROM DUAL) STS ON (TO_CHAR(LAST_DAY((F.DATE_EFF)),'MM/YYYY') = STS.ST) GROUP BY F.CASE_ID, ST ORDER BY F.CASE_ID, ST DESC ;