TSQL: Desired Result
Hi Friends,
I have below sample table
TableA
Id
Value
a
1
a
2
a
3
b
4
b
5
b
6
ResultTableB
ID
columnA
columnB
columnC
a
1
2
3
b
4
5
6
each ID will only have three values with it.
Please provide query to achieve this
CREATE TABLE Foo (
foo_type CHAR(1),
foo_value INT);
INSERT INTO Foo VALUES('A', 1);
INSERT INTO Foo VALUES('A', 2);
INSERT INTO Foo VALUES('A', 3);
INSERT INTO Foo VALUES('A', 4);
INSERT INTO Foo VALUES('B', 5);
INSERT INTO Foo VALUES('B', 6);
WITH cte
AS
SELECT *,ROW_NUMBER() OVER (PARTITION BY foo_type ORDER BY foo_value ) rn
FROM Foo
) SELECT foo_type,
MAX(CASE WHEN rn=1 THEN foo_value END) col1,
MAX(CASE WHEN rn=2 THEN foo_value END) col2,
MAX(CASE WHEN rn=3 THEN foo_value END) col3,
MAX(CASE WHEN rn=4 THEN foo_value END) col4
FROM cte GROUP BY foo_type
Best Regards,Uri Dimant SQL Server MVP,
http://sqlblog.com/blogs/uri_dimant/
MS SQL optimization: MS SQL Development and Optimization
MS SQL Consulting:
Large scale of database and data cleansing
Remote DBA Services:
Improves MS SQL Database Performance
SQL Server Integration Services:
Business Intelligence
Similar Messages
-
Function used in SQL query not showing the desired results
I have created a function that gives me the client id but when i am using the function in the query its not giving me any result i.e. 0 rows but if I execute the function sepreatly and put the result of that function in the qurey it is giving me the desired result please have a look on the following and please reply with you expert opinion:
FUNCTION CODE:
create or replace function j2
(usid in varchar2)
return varchar2
is
cidn_in varchar2(4000) := '';
ls_sep varchar2(1) := ',';
cursor predicate_cidn
is
select
logical_schema_id
from
CLIENT_REGISTRY cr,
MEMBER_ROLE_CLIENT_ASSIGNMENT mrca,
MEMBER m
where
mrca.base_client_id = cr.base_client_id and
mrca.member_id = m.member_id and
cr.schema_in_use_in = '1' and
m.active_status_id = 'A' and
upper(mrca.member_id) = upper(usid);
BEGIN
for GET_CIDN in predicate_cidn
loop
cidn_in := cidn_in || ls_sep || '''' || GET_CIDN.logical_schema_id || '''';
end loop;
cidn_in := substr(cidn_in, 2);
cidn_in := '('||cidn_in||')';
--dbms_output.put_line(cidn_in);
return cidn_in;
END ;
SQL> select j2('qaa@adp') from dual;
J2('QAA@ADP')
('BASE18','SDK1TEST','SEETHA1CONFIG','BASE09','KAREN2','SIVACONFIG','BASE19','SD
K1CTEST','VASU1','KAREN5','EVENTS1CTEST','SDK1','ADA1CONFIG','BASE10','VRB1CONFI
G','CRU2CONFIG','BASE20','SIVATEST','PCOMCONFIG','KP1CONFIG','KAREN4CONFIG','EVE
NTS1TEST','SUZ3CONFIG','DONG2CONFIG','ED2CONFIG','SIVACTEST','APDCONFIG','EVENTS
1CONFIG','ESSCONFIG','SIVA','SDK2CONFIG','ED3CONFIG','RAJ4CONFIG','CBRCONFIG','N
AMRATA2CONFIG','EMIL1','NAMRATA1CONFIG','SDK2CTEST','BVT2CONFIG','MURUGAN1CONFIG
','COB1CONFIG','GABY1TEST','CHR1CONFIG','ED4CONFIG','USE1CONFIG','SDK2TEST','DEM
O1CONFIG','BERNIE1CONFIG','XA1','CAR2TEST','SDK2','ED5CONFIG','PAY1TEST','PAYXCO
NFIG','KP1TEST','SEAN1CONFIG','CAR2CTEST','VASU1CONFIG','SEAN2CONFIG','KP1CTEST'
,'MAU1CONFIG','CONWCONFIG','PAN1CONFIG','MERAJ2','PRA3CONFIG','SEAN5CONFIG','KP1
','PRA4CONFIG','CAR2CONFIG','PRA2CONFIG','SEAN6CONFIG','PRA3TEST','RPT','GABY1CT
EST','SDK3CONFIG','PRA2TEST','SEAN9CONFIG','CAR2','LV1CONFIG','PRA3CTEST','DONG1
CONFIG','TE1CONFIG','MERAJ2CONFIG','VIV1CONFIG','GABY1','SEAN2','PRA2CTEST','PRA
3','RPTCONFIG','PRA4CTEST','SEAN3','MITA1CONFIG','PRA2','RPTCTEST','PCOM1CONFIG'
,'SS2CONFIG','PAY1CONFIG','SEAN7','ANNCONFIG','BASE11','BASE02','LV2CONFIG','RPT
TEST','IMPECONFIG','SUR1CONFIG','SREEK2CONFIG','BASE03','SRINU3CONFIG','BDCONFIG
','JAY1CONFIG','AMMAN1','PRA1TEST','WPGCONFIG','BASE12','MP5CONFIG','MERAJ1','SR
INU2CONFIG','XA1CONFIG','RAJ1CONFIG','WPGCTEST','BASE04','CHRIS','RAJSCONFIG','P
ANKAJ','BASE13','WPGTEST','RAJ3CONFIG','WPG','BASE14','VASU2CONFIG','SRINU1CONFI
G','BASE05','PRA4TEST','VASU1TEST','PRA5CONFIG','NISH1CONFIG','CHRISCONFIG','SDK
3TEST','RAJ3TEST','KP2CONFIG','BASE06','DEFPCONFIG','NISH2CONFIG','CHRISCTEST','
WPSCONFIG','VASU2TEST','BASE15','GABY1CONFIG','PRA5TEST','MITA2CONFIG','BASE07',
'VASU1CTEST','KP2TEST','VASU2CTEST','LAURA3CONFIG','BASE16','CHRISTEST','WPSTEST
','VASU2','KP2CTEST','EVENTS1','BASE17','RAJ2CONFIG','WPSCTEST','BASE08','SREEK1
CONFIG','ADVE','PRA4','SDK1CONFIG','KP2','KAREN1','CRU1CONFIG','WPS')
Now if i put the results (cut and paste )in the query it gives me the results
SQL> select count(*) from baseclient.address_detail where cidn in ('BASE18','SDK1TEST','SEETHA1CONFIG','BASE09','KAREN2','SIVACONFIG','BASE19','SD
2 K1CTEST','VASU1','KAREN5','EVENTS1CTEST','SDK1','ADA1CONFIG','BASE10','VRB1CONFI
3 G','CRU2CONFIG','BASE20','SIVATEST','PCOMCONFIG','KP1CONFIG','KAREN4CONFIG','EVE
4 NTS1TEST','SUZ3CONFIG','DONG2CONFIG','ED2CONFIG','SIVACTEST','APDCONFIG','EVENTS
5 1CONFIG','ESSCONFIG','SIVA','SDK2CONFIG','ED3CONFIG','RAJ4CONFIG','CBRCONFIG','N
6 AMRATA2CONFIG','EMIL1','NAMRATA1CONFIG','SDK2CTEST','BVT2CONFIG','MURUGAN1CONFIG
7 ','COB1CONFIG','GABY1TEST','CHR1CONFIG','ED4CONFIG','USE1CONFIG','SDK2TEST','DEM
O1CONFIG','BERNIE1CONFIG','XA1','CAR2TEST','SDK2','ED5CONFIG','PAY1TEST','PAYXCO
8 9 NFIG','KP1TEST','SEAN1CONFIG','CAR2CTEST','VASU1CONFIG','SEAN2CONFIG','KP1CTEST'
10 ,'MAU1CONFIG','CONWCONFIG','PAN1CONFIG','MERAJ2','PRA3CONFIG','SEAN5CONFIG','KP1
11 ','PRA4CONFIG','CAR2CONFIG','PRA2CONFIG','SEAN6CONFIG','PRA3TEST','RPT','GABY1CT
12 EST','SDK3CONFIG','PRA2TEST','SEAN9CONFIG','CAR2','LV1CONFIG','PRA3CTEST','DONG1
13 CONFIG','TE1CONFIG','MERAJ2CONFIG','VIV1CONFIG','GABY1','SEAN2','PRA2CTEST','PRA
14 3','RPTCONFIG','PRA4CTEST','SEAN3','MITA1CONFIG','PRA2','RPTCTEST','PCOM1CONFIG'
15 ,'SS2CONFIG','PAY1CONFIG','SEAN7','ANNCONFIG','BASE11','BASE02','LV2CONFIG','RPT
16 TEST','IMPECONFIG','SUR1CONFIG','SREEK2CONFIG','BASE03','SRINU3CONFIG','BDCONFIG
17 ','JAY1CONFIG','AMMAN1','PRA1TEST','WPGCONFIG','BASE12','MP5CONFIG','MERAJ1','SR
18 INU2CONFIG','XA1CONFIG','RAJ1CONFIG','WPGCTEST','BASE04','CHRIS','RAJSCONFIG','P
19 ANKAJ','BASE13','WPGTEST','RAJ3CONFIG','WPG','BASE14','VASU2CONFIG','SRINU1CONFI
20 G','BASE05','PRA4TEST','VASU1TEST','PRA5CONFIG','NISH1CONFIG','CHRISCONFIG','SDK
21 3TEST','RAJ3TEST','KP2CONFIG','BASE06','DEFPCONFIG','NISH2CONFIG','CHRISCTEST','
22 WPSCONFIG','VASU2TEST','BASE15','GABY1CONFIG','PRA5TEST','MITA2CONFIG','BASE07',
23 'VASU1CTEST','KP2TEST','VASU2CTEST','LAURA3CONFIG','BASE16','CHRISTEST','WPSTEST
24 ','VASU2','KP2CTEST','EVENTS1','BASE17','RAJ2CONFIG','WPSCTEST','BASE08','SREEK1
25 CONFIG','ADVE','PRA4','SDK1CONFIG','KP2','KAREN1','CRU1CONFIG','WPS');
COUNT(*)
228
BUT if I user the function it gives me no results
0 rows selected and its taking a loon time to reurnThis appears to be a duplicate of the question in this thread
Re: VPD issue Need Assistance ASAP
where I wrote
"Your function returns a single string that happens to have a bunch of commas and quotes in it. An IN list generally requires a list of strings, which your function doesn't return.
You could rewrite the function to be a pipelined table function and then do
select count(*)
from baseclient.address_detail
where cidn in (SELECT cidn
FROM TABLE(<<your pipelined table function>>))
However, I would expect it to be easier not to wrap all this into a function and just have your IN clause be the logic in your predicate_cidn cursor.
Justin
" -
Without using SubReport or SQL Command in Main Report, get desired results without duplicating
It seems so simple. I just need the cost, at a certain time (based on a parameter), for each item. I wrote a SQL Command that works beautifully, but when it connects to the existing report, it slows to a horrible crawl and cannot be used for tables with over 4 million records. Here is the SQL Command that provides the desired results:
SELECT TOP 1 WITH TIES "INVENTITEMPRICE"."ITEMID", "INVENTITEMPRICE"."PRICETYPE", "INVENTITEMPRICE"."MARKUP", "INVENTITEMPRICE"."PRICEUNIT", "INVENTITEMPRICE"."PRICE", "INVENTITEMPRICE"."PRICEQTY", "INVENTITEMPRICE"."ACTIVATIONDATE", "INVENTITEMPRICE"."DATAAREAID"
FROM ("AX09PROD"."dbo"."INVENTITEMPRICE" "INVENTITEMPRICE" INNER JOIN "AX09PROD"."dbo"."INVENTTABLE" "INVENTTABLE" ON (("INVENTITEMPRICE"."ITEMID"="INVENTTABLE"."ITEMID") AND ("INVENTITEMPRICE"."DATAAREAID"="INVENTTABLE"."DATAAREAID")))
WHERE ("INVENTITEMPRICE"."DATAAREAID"=N'TMC' AND "INVENTITEMPRICE"."PRICETYPE"=0 AND "INVENTITEMPRICE"."ACTIVATIONDATE"<={?As Of Date})
ORDER BY ROW_NUMBER () OVER(PARTITION BY "INVENTITEMPRICE"."ITEMID" ORDER BY "INVENTITEMPRICE"."ACTIVATIONDATE" DESC)
I've attached the report with saved data. However, when I remove the restrictions of just certain items, it is unusable as it is SO SLOW!
I can also get the desired results from using a subreport but it takes forever to export due to the number of records/items. Whenever possible, I avoid subreports for this reason. I've attached that report with data as well.
Please be patient as I'm not savvy in SQL, but decent in generating reports. What am I doing wrong? This seems SO simple. The premise is that I want the corresponding information based on the date entered: If the date entered is 3/15/2014, the result should be 91.15 as indicated below. I'd simply like this value to be placed in a formula per item.
Item 80014:
Activation Date
Cost Price
6/2/2014
104.43
4/1/2014
91.58
3/1/2014
91.15
2/1/2014
92.89
1/1/2014
93.57
Any assistance would be GREATLY appreciated!
Thanks!
Teena
Update: I was unable to attach the reports with .rpt or .txt extensions. There were well under 1MB. Any suggestions?hi Teena,
if you're going the inline subquery route, try something like the following...the last line in the sub-query 'where' clause should in theory take care of matching the correct price based on relating the item id's between your cost price & inventory data. this should leave you with distinct values for each itemid then. hopefully it won't error out as i'm just guessing on the syntax.
SELECT DISTINCT
"INVENTTABLE"."ITEMID",
"INVENTTRANS"."DATAAREAID",
"INVENTTRANS"."DATEPHYSICAL",
"INVENTTRANS"."QTY",
"INVENTTABLE"."ITEMGROUPID",
"INVENTTABLE"."ITEMNAME",
"INVENTTRANS"."TRANSREFID",
"INVENTTRANS"."STATUSISSUE",
"INVENTTABLE"."ITEMTYPE",
"INVENTTRANS"."TRANSTYPE",
"INVENTTRANS"."RECID",
"INVENTTRANS"."DIRECTION",
SELECT TOP 1 "INVENTITEMPRICE"."PRICE"
FROM "AX09PROD"."dbo"."INVENTITEMPRICE" "INVENTITEMPRICE"
WHERE "INVENTITEMPRICE"."DATAAREAID" LIKE 'TMC%'
AND "INVENTITEMPRICE"."PRICETYPE"=0
AND "INVENTITEMPRICE"."ACTIVATIONDATE"<={?As Of Date}
AND "INVENTITEMPRICE"."ITEMID" = "INVENTTABLE"."ITEMID"
ORDER BY "INVENTITEMPRICE"."ACTIVATIONDATE" DESC
) AS ITEMPRICE
FROM
"AX09PROD"."dbo"."INVENTTABLE" "INVENTTABLE"
LEFT OUTER JOIN "AX09PROD"."dbo"."INVENTTRANS" "INVENTTRANS"
ON ("INVENTTABLE"."DATAAREAID"="INVENTTRANS"."DATAAREAID")
AND ("INVENTTABLE"."ITEMID"="INVENTTRANS"."ITEMID")
WHERE
"INVENTTRANS"."DATAAREAID" LIKE 'TMC%'
AND (("INVENTTABLE"."ITEMGROUPID" LIKE 'RAW%') OR ("INVENTTABLE"."ITEMGROUPID" BETWEEN '000' AND '999') OR ("INVENTTABLE"."ITEMGROUPID" LIKE 'Ship_Box'))
AND "INVENTTABLE"."ITEMTYPE" IN (0,1)
ORDER BY
"INVENTTABLE"."ITEMGROUPID",
"INVENTTABLE"."ITEMID",
"INVENTTRANS"."DATEPHYSICAL" ASC
Message was edited by: Jamie Wiseman -
Progression not yielding the desired result
Hi
I have written a text query using the progressive relaxation method. It is not giving me the desired results. Here are the query details:
I have created an Intermedia index on a table with following specs:
BEGIN
CTX_DDL.DROP_PREFERENCE('CTXSYS.COMPANY_SEARCH_MULTI');
CTX_DDL.CREATE_PREFERENCE('CTXSYS.COMPANY_SEARCH_MULTI', 'MULTI_COLUMN_DATASTORE');
CTX_DDL.SET_ATTRIBUTE( 'CTXSYS.COMPANY_SEARCH_MULTI',
'columns',
'COMPANY,
DESC_N_PRODS,
PROD_DESC_N_PRODS,
PG_TITLE_GLUSR,
PG_KWD_DESC,
GEOGRAPHICAL_PROFILE,
GLUSR_DESC,
SUBCAT_DESC,
CTL_DESC,
SHORT_PROFILE,
LONG_PROFILE');
CTX_DDL.DROP_SECTION_GROUP('CTXSYS.COMPANY_SEARCH_GROUP');
CTX_DDL.CREATE_SECTION_GROUP('CTXSYS.COMPANY_SEARCH_GROUP', 'BASIC_SECTION_GROUP');
CTX_DDL.ADD_FIELD_SECTION('CTXSYS.COMPANY_SEARCH_GROUP' , 'F1', 'COMPANY');
CTX_DDL.ADD_FIELD_SECTION('CTXSYS.COMPANY_SEARCH_GROUP' , 'F2', 'DESC_N_PRODS');
CTX_DDL.ADD_FIELD_SECTION('CTXSYS.COMPANY_SEARCH_GROUP' , 'F3', 'PROD_DESC_N_PRODS');
CTX_DDL.ADD_FIELD_SECTION('CTXSYS.COMPANY_SEARCH_GROUP' , 'F4', 'PG_TITLE_GLUSR');
CTX_DDL.ADD_FIELD_SECTION('CTXSYS.COMPANY_SEARCH_GROUP' , 'F5', 'PG_KWD_DESC');
CTX_DDL.ADD_FIELD_SECTION('CTXSYS.COMPANY_SEARCH_GROUP' , 'F6', 'GEOGRAPHICAL_PROFILE');
CTX_DDL.ADD_FIELD_SECTION('CTXSYS.COMPANY_SEARCH_GROUP' , 'F7', 'GLUSR_DESC');
CTX_DDL.ADD_FIELD_SECTION('CTXSYS.COMPANY_SEARCH_GROUP' , 'F8', 'SUBCAT_DESC');
CTX_DDL.ADD_FIELD_SECTION('CTXSYS.COMPANY_SEARCH_GROUP' , 'F9', 'CTL_DESC');
CTX_DDL.ADD_FIELD_SECTION('CTXSYS.COMPANY_SEARCH_GROUP' , 'F10','SHORT_PROFILE');
CTX_DDL.ADD_FIELD_SECTION('CTXSYS.COMPANY_SEARCH_GROUP' , 'F11','LONG_PROFILE');
CTX_DDL.DROP_PREFERENCE('CTXSYS.IIL_LEXER');
CTX_DDL.CREATE_PREFERENCE('CTXSYS.IIL_LEXER','BASIC_LEXER');
CTX_DDL.SET_ATTRIBUTE('CTXSYS.IIL_LEXER', 'INDEX_STEMS', 'ENGLISH');
CTX_DDL.DROP_PREFERENCE('CTXSYS.IIL_FUZZY_PREF');
CTX_DDL.CREATE_PREFERENCE('CTXSYS.IIL_FUZZY_PREF', 'BASIC_WORDLIST');
CTX_DDL.SET_ATTRIBUTE('CTXSYS.IIL_FUZZY_PREF','FUZZY_MATCH','ENGLISH');
CTX_DDL.SET_ATTRIBUTE('CTXSYS.IIL_FUZZY_PREF','FUZZY_SCORE','60');
CTX_DDL.SET_ATTRIBUTE('CTXSYS.IIL_FUZZY_PREF','FUZZY_NUMRESULTS','100');
CTX_DDL.SET_ATTRIBUTE('CTXSYS.IIL_FUZZY_PREF','SUBSTRING_INDEX','TRUE');
CTX_DDL.SET_ATTRIBUTE('CTXSYS.IIL_FUZZY_PREF','PREFIX_INDEX','TRUE');
CTX_DDL.SET_ATTRIBUTE('CTXSYS.IIL_FUZZY_PREF','PREFIX_MIN_LENGTH','1');
CTX_DDL.SET_ATTRIBUTE('CTXSYS.IIL_FUZZY_PREF','PREFIX_MAX_LENGTH','3');
CTX_DDL.SET_ATTRIBUTE('CTXSYS.IIL_FUZZY_PREF','WILDCARD_MAXTERMS','15000');
CTX_DDL.SET_ATTRIBUTE('CTXSYS.IIL_FUZZY_PREF','STEMMER','ENGLISH');
END;
CREATE INDEX COMPANY_SEARCH_IM on COMPANY_SEARCH(DUMMY) INDEXTYPE IS
CTXSYS.CONTEXT PARAMETERS
('DATASTORE CTXSYS.COMPANY_SEARCH_MULTI SECTION GROUP CTXSYS.COMPANY_SEARCH_GROUP MEMORY 50M
LEXER CTXSYS.IIL_LEXER WORDLIST CTXSYS.IIL_FUZZY_PREF STOPLIST CTXSYS.IIL_STOPLIST');
Now if I want to search for a string - acrylic crochet
My progressive clause is as follows:
<QUERY>
<TEXTQUERY>
<PROGRESSION>
<SEQ>(acrylic crochet) within F2</SEQ>
<SEQ>($acrylic $crochet) within F2</SEQ>
<SEQ>(acrylic crochet) within F3</SEQ>
<SEQ>($acrylic $crochet) within F3</SEQ>
<SEQ>(NEAR((acrylic,crochet))) within F2</SEQ>
</PROGRESSION>
</TEXTQUERY>
</QUERY>
The data set has a record where F2 Contains following text:
Manufacturers and exporters of yarns like acrylic yarn, viscose yarns, acrylic blended yarn, acrylic knitting yarn, spun yarn, blended yarns, braided thread, chenille yarn, cotton yarn, crochet yarn, dupion silk yarns etc
My problem is that - This record is not coming in the search result.
The record starts appearing if I use only NEAR Clause. as shown below:
<QUERY>
<TEXTQUERY>
<PROGRESSION>
<SEQ>(NEAR((acrylic,crochet))) within F2</SEQ>
</PROGRESSION>
</TEXTQUERY>
</QUERY>
Please advise what could be wrong - is my Index proper, or my progressive clause has some problem or there is something else which I have totally missed.
Regards
MadhupThe discussion in the link below contains the same bug that you have encoutered and some workarounds.
Re: progressive relaxation doesn't progress -
The dashboard propmt not showing desired results
Hi,
I have propmt created using this condition.But it is not showing me the desired results.The code seems to be correct.any help plz...
case when TimeStampDiff(SQL_TSI_DAY,"TB1".CL1,CURRENT_DATE) between 0 and 30 or TimeStampDiff(SQL_TSI_DAY,"TB1".CL2,CURRENT_DATE) between 0 and 30 then '30 days'
when TimeStampDiff(SQL_TSI_DAY,"TB1".CL1,CURRENT_DATE) between 31 and 60 or TimeStampDiff(SQL_TSI_DAY,"TB1".CL2,CURRENT_DATE) between 31 and 60 then ' last 60 days'
when TimeStampDiff(SQL_TSI_DAY,"TB1".CL1,CURRENT_DATE) between 61 and 90 or TimeStampDiff(SQL_TSI_DAY,"TB1".CL1,CURRENT_DATE) between 61 and 90 then 'last 90 days'
else '> 90 and max 100 Days' endHi,
Create a dummy column for the below code
case when TimeStampDiff(SQL_TSI_DAY,"TB1".CL1,CURRENT_DATE) between 0 and 30 or TimeStampDiff(SQL_TSI_DAY,"TB1".CL2,CURRENT_DATE) between 0 and 30 then '30 days'
when TimeStampDiff(SQL_TSI_DAY,"TB1".CL1,CURRENT_DATE) between 31 and 60 or TimeStampDiff(SQL_TSI_DAY,"TB1".CL2,CURRENT_DATE) between 31 and 60 then ' last 60 days'
when TimeStampDiff(SQL_TSI_DAY,"TB1".CL1,CURRENT_DATE) between 61 and 90 or TimeStampDiff(SQL_TSI_DAY,"TB1".CL1,CURRENT_DATE) between 61 and 90 then 'last 90 days'
else '> 90 and max 100 Days' endfilter it as is prompted for that column after giving filter as is prompted you can hide that column or remove it.
Save the report
Assign points and close thread, if your question is answered....
Cheers,
Aravind -
How to define the Market Sales KF, in order to receive the desired result
Hi all,
I dont know how to define the Market Sales Kefigure, in order to get the following result. Any hint is more than welcome.
Prd_ID = Product ID
PS = Product Sales
M_ID = Market ID
MS = Market Sales
MS% = Market Share ( formula in BEX PS/MS)
<b>
Prd_ID;PS;M_ID;MS;MS%</b>
A00001;10;MRK1;100;10%
A00002;20;MRK1;100;20%
<b>SBTOT</b>;30;MRK1;100;30%
B00001;40;MRK2;200;20%
B00002;30;MRK2;200;15%
<b>SBTOT</b>;70;MRK2;200;35%
<b>GTOTL</b>;100;MRKX;300;33,3%
Products A00001 and A00002 compete in the same market. So the individual marketshares should be calculated against the market MRK1(200), e.g. 40/200 and 30/200.
The totals now, of the A00001 and A00002 products(3040) should be compared against <b>the same market</b> MRK1(200),</b> and <b>not against</b> the MRK1MRK1(200+200).
Thanks
Vasso Siagri<b></b><b></b><b></b>Maik,
thank you for your answer, but I am afraid this is not giving the desired results.
What I want----
>What am getting
Prd_ID;PS;M_ID;MS;MS%
A00001;10;MRK1;100;10% ---> 10;MRK1;200;5%
A00002;20;MRK1;100;20% ---> 20;MRK1;200;10%
SBTOT;30;MRK1;100;30% ---> 30;MRK1;200;15%
B00001;40;MRK2;200;20% ---> 40;MRK2;400;10%
B00002;30;MRK2;200;15% ---> 30;MRK2;400;7,5%
SBTOT;70;MRK2;200;35% ---> 70;MRK2;400;17,5%
GTOTL;100;MRKX;300;33,3% ---> 1000;MRKX;600;16,7%
Neither resticted KF restricted on Market ID is working for many markets; it is working only if you analyze one market id.
Any idea? bw idea? What actually I need is aggregation of unique records in terms on market id. -
Write a query / pl/sql statement for desired results
Here is the table data:
FSSETY FSUSER FSOBNM FSA FSCHNG FSDLT FSIOK FSICPY FSATN1
1 DSTEIN P0030A N N N Y N Y
1 FINAB001 P0030A Y Y Y Y Y Y
1 FINAB001 P01012 Y Y Y Y Y Y
1 DSTEIN P01012 Y Y Y Y Y Y
1 DSTEIN P01013 Y Y Y Y Y Y
1 FINAB001 P01013 Y Y Y Y Y Y
1 FINAB001 P0111 Y Y Y Y Y Y
1 DSTEIN P0111 Y Y Y Y Y Y
1 DSTEIN P01111 Y Y Y Y Y Y
1 FINAB001 P01111 Y Y Y Y Y Y
1 FINAB001 P0115 Y Y Y Y Y Y
1 DSTEIN P0115 Y Y Y Y Y Y
1 DSTEIN P01BDWRD Y Y Y Y Y Y
1 FINAB001 P01BDWRD Y Y Y Y Y Y
1 FINAB001 P0411 Y Y Y Y Y Y
1 DSTEIN P0411 N N N Y N Y
What I need in results is:
For each FSOBNM, return the rows with different FSUSER values and non-matching values in fsa OR fschng OR fsdlt OR fsicpy.
So, the desired output of the query should return the first two rows and the last two rows, as they meet this criteria.
I need help in the statement that would return the desired results.
Thanks!
Edited by: skyfox on 17-May-2012 5:54 PM
Edited by: skyfox on 17-May-2012 5:54 PMHi Skyfox,
Below is the query you might be looking into
SQL>
SQL> WITH test AS(
2 SELECT 1 FSSETY, 'DSTEIN' FSUSER, 'P0030A' FSOBNM, 'N' FSA, 'N' FSCHNG, 'N' FSDLT, 'Y' FSIOK, 'N' FSICPY, 'Y' FSATN1 FROM DUAL UNION ALL
3 SELECT 1 FSSETY, 'FINAB001' FSUSER, 'P0030A' FSOBNM, 'Y' FSA, 'Y' FSCHNG, 'Y' FSDLT, 'Y' FSIOK, 'Y' FSICPY, 'Y' FSATN1 FROM DUAL UNION ALL
4 SELECT 1 FSSETY, 'FINAB001' FSUSER, 'P01012' FSOBNM, 'Y' FSA, 'Y' FSCHNG, 'Y' FSDLT, 'Y' FSIOK, 'Y' FSICPY, 'Y' FSATN1 FROM DUAL UNION ALL
5 SELECT 1 FSSETY, 'DSTEIN' FSUSER, 'P01012' FSOBNM, 'Y' FSA, 'Y' FSCHNG, 'Y' FSDLT, 'Y' FSIOK, 'Y' FSICPY, 'Y' FSATN1 FROM DUAL UNION ALL
6 SELECT 1 FSSETY, 'DSTEIN' FSUSER, 'P01013' FSOBNM, 'Y' FSA, 'Y' FSCHNG, 'Y' FSDLT, 'Y' FSIOK, 'Y' FSICPY, 'Y' FSATN1 FROM DUAL UNION ALL
7 SELECT 1 FSSETY, 'FINAB001' FSUSER, 'P01013' FSOBNM, 'Y' FSA, 'Y' FSCHNG, 'Y' FSDLT, 'Y' FSIOK, 'Y' FSICPY, 'Y' FSATN1 FROM DUAL UNION ALL
8 SELECT 1 FSSETY, 'FINAB001' FSUSER, 'P0111' FSOBNM, 'Y' FSA, 'Y' FSCHNG, 'Y' FSDLT, 'Y' FSIOK, 'Y' FSICPY, 'Y' FSATN1 FROM DUAL UNION ALL
9 SELECT 1 FSSETY, 'DSTEIN' FSUSER, 'P0111' FSOBNM, 'Y' FSA, 'Y' FSCHNG, 'Y' FSDLT, 'Y' FSIOK, 'Y' FSICPY, 'Y' FSATN1 FROM DUAL UNION ALL
10 SELECT 1 FSSETY, 'DSTEIN' FSUSER, 'P01111' FSOBNM, 'Y' FSA, 'Y' FSCHNG, 'Y' FSDLT, 'Y' FSIOK, 'Y' FSICPY, 'Y' FSATN1 FROM DUAL UNION ALL
11 SELECT 1 FSSETY, 'FINAB001' FSUSER, 'P01111' FSOBNM, 'Y' FSA, 'Y' FSCHNG, 'Y' FSDLT, 'Y' FSIOK, 'Y' FSICPY, 'Y' FSATN1 FROM DUAL UNION ALL
12 SELECT 1 FSSETY, 'FINAB001' FSUSER, 'P0115' FSOBNM, 'Y' FSA, 'Y' FSCHNG, 'Y' FSDLT, 'Y' FSIOK, 'Y' FSICPY, 'Y' FSATN1 FROM DUAL UNION ALL
13 SELECT 1 FSSETY, 'DSTEIN' FSUSER, 'P0115' FSOBNM, 'Y' FSA, 'Y' FSCHNG, 'Y' FSDLT, 'Y' FSIOK, 'Y' FSICPY, 'Y' FSATN1 FROM DUAL UNION ALL
14 SELECT 1 FSSETY, 'DSTEIN' FSUSER, 'P01BDWRD' FSOBNM, 'Y' FSA, 'Y' FSCHNG, 'Y' FSDLT, 'Y' FSIOK, 'Y' FSICPY, 'Y' FSATN1 FROM DUAL UNION ALL
15 SELECT 1 FSSETY, 'FINAB001' FSUSER, 'P01BDWRD' FSOBNM, 'Y' FSA, 'Y' FSCHNG, 'Y' FSDLT, 'Y' FSIOK, 'Y' FSICPY, 'Y' FSATN1 FROM DUAL UNION ALL
16 SELECT 1 FSSETY, 'FINAB001' FSUSER, 'P0411' FSOBNM, 'Y' FSA, 'Y' FSCHNG, 'Y' FSDLT, 'Y' FSIOK, 'Y' FSICPY, 'Y' FSATN1 FROM DUAL UNION ALL
17 SELECT 1 FSSETY, 'DSTEIN' FSUSER, 'P0411' FSOBNM, 'N' FSA, 'N' FSCHNG, 'N' FSDLT, 'Y' FSIOK, 'N' FSICPY, 'Y' FSATN1 FROM DUAL)
18 SELECT *
19 FROM test a
20 WHERE EXISTS (SELECT 1 FROM test
21 WHERE fsobnm = a.fsobnm
22 AND fsuser != a.fsuser
23 AND (fsa != a.fsa OR fschng != a.fschng OR fsdlt != a.fsdlt OR fsicpy != a.fsicpy))
24 /
FSSETY FSUSER FSOBNM FSA FSCHNG FSDLT FSIOK FSICPY FSATN1
1 DSTEIN P0030A N N N Y N Y
1 FINAB001 P0030A Y Y Y Y Y Y
1 FINAB001 P0411 Y Y Y Y Y Y
1 DSTEIN P0411 N N N Y N Y
SQL> -
To_date function not fetching the desired result.....
Hi Gurus,
I get varied results from the below 2 queries, I am pessimistic about using to_char instead prefer using to_date, but query doesn't seem to fetch the complete data while using the to_date but with to_char it works. Please can someone make this to_date used query below work for me.
Main table structure:
Column Name ID Pk Null? Data Type Default Histogram Encryption Alg Salt
MINISTRY_CODE 1 Y VARCHAR2 (15 Byte) Yes
BILL_MONTH 2 Y DATE Yes
CUBIC 3 Y NUMBER Yes
GALLONS 4 Y NUMBER Yes
AMOUNTS 5 Y NUMBER Yes
MTR_TYPE 6 Y CHAR (1 Byte) Yes 1st query:
SELECT ministry_code,
DECODE(mtr_type, 'C','Billed Cubic',
'G','Billed Gallons',
'A','Billed OMR',
'R','Collected',
'U','Total Unpaid Bills') mtr_type,
SUM(CASE
WHEN mtr_type NOT IN ('C','G','A','R','U') THEN 0 WHEN to_char(bill_month,'MMYYYY') = '012011' AND mtr_type = 'C' THEN cubic
WHEN mtr_type NOT IN ('C','G','A','R','U') THEN 0 WHEN to_char(bill_month,'MMYYYY') = '012011' AND mtr_type = 'G' THEN (gallons)
WHEN mtr_type NOT IN ('C','G','A','R','U') THEN 0 WHEN to_char(bill_month,'MMYYYY') = '012011' AND mtr_type = 'A' THEN amounts
WHEN mtr_type NOT IN ('C','G','A','R','U') THEN 0 WHEN to_char(bill_month,'MMYYYY') = '022011' AND mtr_type = 'R' THEN amounts
WHEN mtr_type NOT IN ('C','G','A','R','U') THEN 0 WHEN to_char(bill_month,'MMYYYY') <= '022011' AND mtr_type = 'U' THEN amounts ELSE 0 END) January
FROM tmp_paew_month_gafu1 WHERE ministry_code IN
(SELECT DISTINCT ministry_code FROM tmp_paew_month_gafu GROUP BY ministry_code)
GROUP BY ministry_code,mtr_type
ORDER BY 1,3 DESCSAMPLE OUTPUT:
MINISTRY_CODE MTR_TYPE JANUARY
001 Billed Gallons 5326252
001 Billed Cubic 24210.2363636364
001 Total Unpaid Bills 16402.5
001 Billed OMR 13287.36
001 Collected 10410.508
002 Total Unpaid Bills 12089.99
002 Billed Cubic 0
002 Billed OMR 0
002 Billed Gallons 0
002 Collected 0
003 Total Unpaid Bills 27418.711
2nd query:
SELECT ministry_code,
DECODE(mtr_type, 'C','Billed Cubic',
'G','Billed Gallons',
'A','Billed OMR',
'R','Collected',
'U','Total Unpaid Bills') mtr_type,
SUM(CASE
WHEN mtr_type NOT IN ('C','G','A','R','U') THEN 0 WHEN to_char(bill_month) = to_date('012011','MMYYYY') AND mtr_type = 'C' THEN cubic
WHEN mtr_type NOT IN ('C','G','A','R','U') THEN 0 WHEN to_date(bill_month) = to_date('012011','MMYYYY') AND mtr_type = 'G' THEN (gallons)
WHEN mtr_type NOT IN ('C','G','A','R','U') THEN 0 WHEN to_date(bill_month) = to_date('012011','MMYYYY') AND mtr_type = 'A' THEN amounts
WHEN mtr_type NOT IN ('C','G','A','R','U') THEN 0 WHEN to_date(bill_month) = to_date('022011','MMYYYY') AND mtr_type = 'R' THEN amounts
WHEN mtr_type NOT IN ('C','G','A','R','U') THEN 0 WHEN to_date(bill_month) <= to_date('022011','MMYYYY') AND mtr_type = 'U' THEN amounts ELSE 0 END) January
FROM tmp_paew_month_gafu1 WHERE ministry_code IN
(SELECT DISTINCT ministry_code FROM tmp_paew_month_gafu GROUP BY ministry_code)
GROUP BY ministry_code,mtr_type
ORDER BY 1,3 DESCSample OUTPUT:
MINISTRY_CODE MTR_TYPE JANUARY
001 Total Unpaid Bills 106062.002
001 Billed OMR 0
001 Billed Cubic 0
001 Billed Gallons 0
001 Collected 0
002 Total Unpaid Bills 42023.243
002 Collected 0
002 Billed Gallons 0
002 Billed Cubic 0
002 Billed OMR 0
003 Total Unpaid Bills 133260.435What is the sense of to_date(bill_month) in the second query?
bill_month is already a date. to_date function will expect a character parameter and convert it in a date value.
So what will happen? First the bill_month will be implicitely converted to a character value.
Second this character value will be converted back to a date. You gave no format string. So both conversions will be made will your setting of nls_date_format.
I can only guess what you really want. Perhaps you want to trunc the bill_month with trunc(bill_month,'MM').
Please give us
- table create script
- insert statements for test data
- required output for these test data
- description of your requirements
Edited by: hm on 22.11.2012 23:16 -
Query not showing desired result
Hi All,
DB :-10.2.0.3
I am using following query to extarct the backuppice, which falls between the dates specified by query. I am really amazed, why it's not giving me the expected results.
select handle, to_char(start_time, 'dd-mon-yy hh24:mi:ss') "start_time" , to_char(completion_time, ' dd-mon-yy hh24:mi:ss') "end_time" from
v$backup_piece where
to_char(start_time,'dd-mon-yy hh24:mi:ss') >'27-oct-10 23:00:00'
and
to_char(completion_time,'dd-mon-yy hh24:mi:ss')<'28-oct-10 04:20:53'
Results truncated, just to fit in this window.
23:02:25
/data/oracle/LNEVRPP1/backup/database/c-465769364-20100927-0c 27-sep-10 23:02:39 27-sep-10
23:02:40
/data/oracle/LNEVRPP1/backup/database/LNEVRPP1_ctl_l1_t730854174_s32554_p1.rmn 27-sep-10 23:02:58 27-sep-10
23:02:59
/data/oracle/LNEVRPP1/backup/database/c-465769364-20100927-0d 27-sep-10 23:03:02 27-sep-10
23:03:02
/data/oracle/LNEVRPP1/backup/database/LNEVRPP1_arc_l1_t730854220_s32556_p1.rmn 27-sep-10 23:03:41 27-sep-10
23:03:44
/data/oracle/LNEVRPP1/backup/database/c-465769364-20100927-0e 27-sep-10 23:03:51 27-sep-10
23:03:51
/data/oracle/LNEVRPP1/backup/database/LNEVRPP1_dbf_l0_t733532449_s33531_p1.rmn 27-oct-10 23:00:50 27-oct-10
23:36:00
/data/oracle/LNEVRPP1/backup/database/LNEVRPP1_dbf_l0_t733534566_s33532_p1.rmn 27-oct-10 23:36:07 27-oct-10
23:48:38
HANDLE start_time end_time
/data/oracle/LNEVRPP1/backup/arc2adsm/LNEVRPP1_arc_l0_t733536053_s33534_p1.rmn 28-oct-10 00:00:54 28-oct-10
00:01:13
/data/oracle/LNEVRPP1/backup/database/c-465769364-20101028-00 28-oct-10 00:01:22 28-oct-10
00:01:23
/data/oracle/LNEVRPP1/backup/database/LNEVRPP1_dbf_l0_t733535322_s33533_p1.rmn 27-oct-10 23:48:43 28-oct-10
00:20:06
/data/oracle/LNEVRPP1/backup/database/LNEVRPP1_dbf_l0_t733537209_s33536_p1.rmn 28-oct-10 00:20:10 28-oct-10
00:33:44
/data/oracle/LNEVRPP1/backup/database/c-465769364-20101028-01 28-oct-10 00:33:47 28-oct-10
00:33:48
/data/oracle/LNEVRPP1/backup/database/LNEVRPP1_ctl_l0_t733538041_s33538_p1.rmn 28-oct-10 00:34:04 28-oct-10
00:34:04
/data/oracle/LNEVRPP1/backup/database/c-465769364-20101028-02 28-oct-10 00:34:06 28-oct-10
00:34:07Hi
Try:
select handle, to_char(start_time, 'dd-mon-yy hh24:mi:ss') "start_time" , to_char(completion_time, ' dd-mon-yy hh24:mi:ss') "end_time"
from v$backup_piece
where start_time > to_date ('27-oct-10 23:00:00','dd-mon-yy hh24:mi:ss')
and completion_time < to_date ('28-oct-10 23:00:00','dd-mon-yy hh24:mi:ss')
Regards,
Tycho -
Query: Not getting the desired result. Please help
QL> select * from ecev;
entity_Tag
7
8
9
10
1
2
3
4
5
6
SQL> select * from dg;
DIGP_TAG CEPT_TAG
600 1
700 1
800 1
900 1
100 1
200 1
500 1
75 2
SQL> select * from enow;
ENTITY_CODE ENTITY_TAG DIGP_TAG TARGET_DA CEPT_TAG
EXT 7 600 26-MAY-07 1
EXT 8 700 26-MAY-07 1
EXT 9 800 26-MAY-07 1
EXT 10 800 22-APR-76 1
EXT 1 100 20-OCT-06 1
EXT 2 200 20-OCT-06 1
EXT 3 500 20-OCT-06 1
EXT 4 100 20-OCT-06 1
EXT 5 100 20-OCT-06 1
EXT 6 80 20-OCT-06 1
EXT 1 75 2
SQL> select * from tk;
TK_TAG DIGP_TAG NARRATIVE DUE_DATE CEPT_TAG
35 90 raj 27-MAY-07 1
36 900 kkd 27-MAY-07 1
37 100 kim 28-MAY-07 1
30 100 ram 23-MAY-07 1
31 100 kish 23-MAY-07 1
32 200 mar 23-MAY-07 1
33 100 gy 23-MAY-07 1
34 100 mm 27-MAY-07 1
8 rows selected.
For the following query
1 select
2 d.ecev_tag ecev_tag,
3 a.digp_tag entity_owner ,
4 c.digp_tag task_owner,
5 c.tk_tag task_tag,
6 c.narrative
7 from enow a,
8 entl b,
9 tk c,
10 ecev d
11 where ( a.DIGP_TAG=100 or c.digp_tag=100)
12 and a.entity_tag=b.entity_tag(+)
13 and b.tk_tag=c.tk_tag(+)
14* and a.entity_tag=d.entity_tag
SQL> select * from entl;
TK_TAG ENTITY_TAG
35 5
36 10
30 1
31 1
32 2
33 3
34 3
Result:
I get
entity_tag ENTITY_OWNER TASK_OWNER TASK_TAG NARRATIVE
5 100 90 35 raj row1
1 100 100 30 ram row2
1 75 100 30 ram row3 1 100 100 31 kish row4
1 75 100 31 kish row5 3 500 100 33 gy row6
3 500 100 34 mm row7
4 100 row8
Row1: yes, since entity_tag 5 is owned by digp_tag 100 (enow)
Row2: yes, since entity_tag 1 is owned by digp_tag 100 (enow)
Row3: NO, since entity_tag 1 is owned by digp_tag 75, which in turn is in cept_tag 2, since the passed digp_tag is 100 and it just belongs to cept_tag 1 we should not be getting this row.
Row4: Yes, since tk_tag 31 is owned by digp_tag 100 (tk)
Row5 NO, since entity_tag 1 is owned by digp_tag 75, which in turn is in cept_tag 2 since the passed digp_tag is 100 and it just belongs to cept_tag 1 we should not be getting this row.
Row6: Yes, since tk_tag 33 is owned by digp_tag 100 (enow)
Row7: Yes, since tk_tag 34 is owned by digp_tag 100(enow)
Row8: Yes, since entity_tag 4 is owned by 100(enow
I guess i have to join dg.cept_tag and a.cept_tag, but it is not working.....
Can somebody understand this and help...
Thanks
RamQL> select * from ecev;
entity_Tag
7
8
9
0
1
2
3
4
5
6
SQL> select * from dg;
DIGP_TAG CEPT_TAG
600 1
700 1
800 1
900 1
100 1
200 1
500 1
75 2
SQL> select * from enow;
ENTITY_CODE ENTITY_TAG DIGP_TAG
TARGET_DA CEPT_TAG
EXT 7
600 26-MAY-07 1
8 700
26-MAY-07 1
EXT 9
800 26-MAY-07 1
10 800
22-APR-76 1
EXT 1
100 20-OCT-06 1
2 200
20-OCT-06 1
EXT 3
500 20-OCT-06 1
4 100
20-OCT-06 1
EXT 5
100 20-OCT-06 1
6 80
20-OCT-06 1
EXT 1
75 2
L> select * from tk;
TK_TAG DIGP_TAG NARRATIVE DUE_DATE
CEPT_TAG
35 90 raj 27-MAY-07 1
36 900 kkd 27-MAY-07 1
37 100 kim 28-MAY-07 1
30 100 ram 23-MAY-07 1
31 100 kish 23-MAY-07 1
32 200 mar 23-MAY-07 1
33 100 gy 23-MAY-07 1
34 100 mm 27-MAY-07 1
8 rows selected.
For the following query
1 select
2 d.ecev_tag ecev_tag,
3 a.digp_tag entity_owner ,
4 c.digp_tag task_owner,
5 c.tk_tag task_tag,
6 c.narrative
7 from enow a,
8 entl b,
9 tk c,
10 ecev d
11 where ( a.DIGP_TAG=100 or c.digp_tag=100)
12 and a.entity_tag=b.entity_tag(+)
13 and b.tk_tag=c.tk_tag(+)
14* and a.entity_tag=d.entity_tag
SQL> select * from entl;
TK_TAG ENTITY_TAG
35 5
36 10
30 1
31 1
32 2
33 3
34 3
sult:
I get
entity_tag ENTITY_OWNER TASK_OWNER TASK_TAG
NARRATIVE
5 100 90
35 raj row1
100 100 30
ram row2
75 100
30 ram row31 100 100
31 kish row4
75 100
31 kish row5
3 500 100
33 gy row6
500 100 34
mm row7
100 row8
1: yes, since entity_tag 5 is owned by digp_tag 100
(enow)
Row2: yes, since entity_tag 1 is owned by digp_tag
100 (enow)
Row3: NO, since entity_tag 1 is owned by digp_tag 75,
which in turn is in cept_tag 2, since the passed
digp_tag is 100 and it just belongs to cept_tag 1 we
should not be getting this row.
Row4: Yes, since tk_tag 31 is owned by digp_tag 100
(tk)
Row5 NO, since entity_tag 1 is owned by digp_tag 75,
which in turn is in cept_tag 2 since the passed
digp_tag is 100 and it just belongs to cept_tag 1 we
should not be getting this row.
Row6: Yes, since tk_tag 33 is owned by digp_tag 100
(enow)
Row7: Yes, since tk_tag 34 is owned by digp_tag
100(enow)
Row8: Yes, since entity_tag 4 is owned by 100(enow
I guess i have to join dg.cept_tag and a.cept_tag,
but it is not working.....
Can somebody understand this and help...
Thanks
Ram
Result:
I get
entity_tag ENTITY_OWNER TASK_OWNER TASK_TAG NARRATIVE
5 100 90 35 raj row1
1 100 100 30 ram row2
1 75 100 30 ram row3
1 100 100 31 kish row4
1 75 100 31 kish row5
3 500 100 33 gy row6
3 500 100 34 mm row7
4 100 row8 -
Not sure how to get the rest of my desired results
In my first query, I am getting hits for any entry where the
value of rideDistance is greater than 99
In the first part of the second query, I am grouping the hits
from the first query together by riderId and getting a count per
rider
*** THUS if there were five hits in the first query and the
riderId were: 1, 5, 1, 1, 2
then the count for riderId 1 would be 3, riderId 5 would be 1
and riderId 2 would be 1
Now based on the riderId, I need to query another table to
pull the name that matches the riderId. But I'm not sure how to do
this. I thought maybe I could put a second select inside the second
query, but I think this has to go in a WHERE but I am not using a
WHERE in the second query just a GROUP BY
Can somebody give me some suggestions on what I might try.Life got in the way of me getting back to your answers
sooner. Thanks for all the help. I actually tried using a Join
first, but couldn't get the responses I wanted - I must have been
making an error as this time through it worked.
Now if I could ask for just a little more help. Current code
is below.
I'm taking my results and putting them into a pie chart.
Currently I get the "centuryCountByRider" as the value for
each pie slice (which is correct) and it shows the amount next to
each pie slice. I would like for it to keep the
"centuryCountByRider" as the amount (valueColumn) but show the name
of the person.
I realize I could put this in the popup box when you mouse
over each pie slice, but I really want the name shown next to each
slice. Also the exact name shown will be generated from a cfif -
cfif show name is m - show middleName, f - firstName, n - nickName. -
Help!!!it's not the desired result of oci bulk update!!
here is demo_update of oci/samples cdemodr1.c,i modified a little,and the other of cdemodr1.c keeps unchanged:
1.
give the result:
after demo_insert
in4[i] = 400.555 + (float)i;//c4 value
get the result:
C1 C4
1 400.554993
2 401.554993
3 402.554993
4 403.554993
5 404.554993
6 405.554993
7 406.554993
8 407.554993
9 408.554993
10 409.554993
i expect to update c4 value to:
in4[i] = 1401.555 + (float)i;
and get the result:
C1 C4
1 1400.554993
2 1401.554993
3 1402.554993
4 1403.554993
5 1404.554993
6 1405.554993
7 1406.554993
8 1407.554993
9 1408.554993
10 1409.554993
but after my modified demo_update,
the result is not the expectation,
the resule is:
C1 C4
1 1403.55505
2 1403.55505
3 1403.55505
4 1403.55505
5 1403.55505
6 1403.55505
7 1403.55505
8 1403.55505
9 1403.55505
10 1403.55505
2.
table create script:
create table TAB1
c1 integer not null
c2 char(40),
c3 varchar2(40),
c4 float,
c5 decimal,
c6 decimal(8,3),
c7 numeric,
c8 numeric(7,2),
c9 date,
c10 raw(40),
constraint ind_tab1
organization index;3.
here is my modified demo_update():
please help me to check out where it goes wrong!!
thank you!!!
static sword demo_update(OCISvcCtx svchp, OCIStmt stmthp,
OCIBind bndhp[], OCIError errhp)
int i, j;
int range_size = 3; /* iterations */
sb4 len;
* This function updates columns in table TAB1, for certain rows
* depending on the values of the :low and :high values in
* in the WHERE clause. It executes this statement 3 times, (3 iterations)
* each time with a different set of values for :low and :high
* Thus for each iteration, multiple rows are returned depending
* on the number of rows that matched the WHERE clause.
* The rows it updates here are the rows that were inserted by the
* cdemodr1.sql script.
/* The Update Statement with RETURNING clause */
text sqlstmt = (text )
"UPDATE TAB1 SET C2 = :1, C3 = :1, \
C4 = :1, C5 = :1, C6 = :1, \
C7 = :1, C8 = :1, C9 = :1, C10 = :1 \
/* Prepare the statement */
if (OCIStmtPrepare(stmthp, errhp, sqlstmt, (ub4)strlen((char *)sqlstmt),
(ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT))
(void) printf("FAILED: OCIStmtPrepare() update\n");
report_error(errhp);
return OCI_ERROR;
/* Initialise the buffers for insertion */
for (i = 0; i < MAXITER; i++)
//in1[i] = 300 + i;
memset((void *)in2, (int) 'a'+i%26, (size_t) 40);
memset((void *)in3[i], (int) 'A'+i%26, (size_t) 40);
in4[i] = 1401.555 + (float)i;
in5[i] = 500 + i;
in6[i] = 600.280 + (float)i;
in7[i] = 700 + i;
in8[i] = 800.620 + (float)i;
in9[i][0] = 119;
in9[i][1] = 185 - (ub1)i%10;
in9[i][2] = (ub1)i%12 + 1;
in9[i][3] = (ub1)i%25 + 1;
in9[i][4] = 0;
in9[i][5] = 0;
in9[i][6] = 0;
for (j = 0; j < 40; j++)
in10[i][j] = (ub1) (i%0x08);
rowsret[i] =0;
len = /*sizeof(in1[0]) + */sizeof(in2[0]) + sizeof(in3[0]) + sizeof(in4[0]) + sizeof(in5[0])
+ sizeof(in6[0]) + sizeof(in7[0]) + sizeof(in8[0]) + sizeof(in9[0]) + sizeof(in10[0]);
/* Bind all the input buffers to place holders (:1, :2. :3, etc ) */
//if (bind_input(stmthp, bndhp, errhp))
// return OCI_ERROR;
if (/*OCIBindByPos(stmthp, &bndhp[0], errhp, (ub4) 10,
(dvoid *) &in1[0], (sb4) sizeof(in1[0]), SQLT_INT,
(dvoid *) 0, (ub2 *)0, (ub2 *)0,
(ub4) 0, (ub4 *) 0, (ub4) OCI_DEFAULT)
||*/ OCIBindByPos(stmthp, &bndhp[1], errhp, (ub4) 1,
(dvoid *) in2[0], (sb4) sizeof(in2[0]), SQLT_AFC,
(dvoid *) 0, (ub2 *)0, (ub2 *)0,
(ub4) 0, (ub4 *) 0, (ub4) OCI_DEFAULT)
|| OCIBindByPos(stmthp, &bndhp[2], errhp, (ub4) 2,
(dvoid *) in3[0], (sb4) sizeof(in3[0]), SQLT_CHR,
(dvoid *) 0, (ub2 *)0, (ub2 *)0,
(ub4) 0, (ub4 *) 0, (ub4) OCI_DEFAULT)
|| OCIBindByPos(stmthp, &bndhp[3], errhp, (ub4) 3,
(dvoid *) &in4[0], (sb4) sizeof(in4[0]), SQLT_FLT,
(dvoid *) 0, (ub2 *)0, (ub2 *)0,
(ub4) 0, (ub4 *) 0, (ub4) OCI_DEFAULT)
|| OCIBindByPos(stmthp, &bndhp[4], errhp, (ub4) 4,
(dvoid *) &in5[0], (sb4) sizeof(in5[0]), SQLT_INT,
(dvoid *) 0, (ub2 *)0, (ub2 *)0,
(ub4) 0, (ub4 *) 0, (ub4) OCI_DEFAULT)
|| OCIBindByPos(stmthp, &bndhp[5], errhp, (ub4) 5,
(dvoid *) &in6[0], (sb4) sizeof(in6[0]), SQLT_FLT,
(dvoid *) 0, (ub2 *)0, (ub2 *)0,
(ub4) 0, (ub4 *) 0, (ub4) OCI_DEFAULT)
|| OCIBindByPos(stmthp, &bndhp[6], errhp, (ub4) 6,
(dvoid *) &in7[0], (sb4) sizeof(in7[0]), SQLT_INT,
(dvoid *) 0, (ub2 *)0, (ub2 *)0,
(ub4) 0, (ub4 *) 0, (ub4) OCI_DEFAULT)
|| OCIBindByPos(stmthp, &bndhp[7], errhp, (ub4) 7,
(dvoid *) &in8[0], (sb4) sizeof(in8[0]), SQLT_FLT,
(dvoid *) 0, (ub2 *)0, (ub2 *)0,
(ub4) 0, (ub4 *) 0, (ub4) OCI_DEFAULT)
|| OCIBindByPos(stmthp, &bndhp[8], errhp, (ub4) 8,
(dvoid *) in9[0], (sb4) sizeof(in9[0]), SQLT_DAT,
(dvoid *) 0, (ub2 *)0, (ub2 *)0,
(ub4) 0, (ub4 *) 0, (ub4) OCI_DEFAULT)
|| OCIBindByPos(stmthp, &bndhp[9], errhp, (ub4) 9,
(dvoid *) in10[0], (sb4) sizeof(in10[0]), SQLT_BIN,
(dvoid *) 0, (ub2 *)0, (ub2 *)0,
(ub4) 0, (ub4 *) 0, (ub4) OCI_DEFAULT))
(void) printf("FAILED: OCIBindByPos()\n");
report_error(errhp);
return OCI_ERROR;
if (/*OCIBindArrayOfStruct(bndhp[0], errhp, s1, indsk[0], rlsk[0], rcsk[0])
||*/ OCIBindArrayOfStruct(bndhp[1], errhp, s2, indsk[1], rlsk[1], rcsk[1])
|| OCIBindArrayOfStruct(bndhp[2], errhp, s3, indsk[2], rlsk[2], rcsk[2])
|| OCIBindArrayOfStruct(bndhp[3], errhp, s4, indsk[3], rlsk[3], rcsk[3])
|| OCIBindArrayOfStruct(bndhp[4], errhp, s5, indsk[4], rlsk[4], rcsk[4])
|| OCIBindArrayOfStruct(bndhp[5], errhp, s6, indsk[5], rlsk[5], rcsk[5])
|| OCIBindArrayOfStruct(bndhp[6], errhp, s7, indsk[6], rlsk[6], rcsk[6])
|| OCIBindArrayOfStruct(bndhp[7], errhp, s8, indsk[7], rlsk[7], rcsk[7])
|| OCIBindArrayOfStruct(bndhp[8], errhp, s9, indsk[8], rlsk[8], rcsk[8])
|| OCIBindArrayOfStruct(bndhp[9], errhp, s10, indsk[9], rlsk[9], rcsk[9]))
(void) printf("FAILED: OCIBindArrayOfStruct()\n");
report_error(errhp);
return OCI_ERROR;
(void) printf("\n\n DEMONSTRATING UPDATE....RETURNING \n");
if (OCIStmtExecute(svchp, stmthp, errhp, (ub4) range_size, (ub4) 0,
(CONST OCISnapshot*) 0, (OCISnapshot*) 0,
(ub4) OCI_DEFAULT))
(void) printf("FAILED: OCIStmtExecute() update\n");
report_error(errhp);
return OCI_ERROR;
/* Commit the changes */
(void) OCITransCommit(svchp, errhp, (ub4) 0);
/* Print out the values in the return rows */
//(void) print_return_data(range_size);
return OCI_SUCCESS; -
Name attribute not giving the desired result in form tag
Hi,
I am using struts and the name attribute in form tag is not giving me the desired reuslt. The code is
<html:form name="loginActionForm" type="source.form.LoginActionForm" action="/login.do" method="post">
</html:form>
when I am trying to use the name in javascript then I am getting an error
"document.loginActionForm " is null or not an object.Where am I going wrong?I did so but the name I have used in the form tag is the same as what i have used in javascript.I dont think that it is a javascript error and it must be some mistake I made in the form tag.Also one more thing is it necessary to use the type attribute if you use the name attribute.
-
Group by Query not giving desired results
Hi,
I've a requirement to find minimum month based on status:
The following query is giving error :
SELECT
b.app_name,
DECODE (a.status,
'C','Closed',
'O','Open',
'F','Future',
'W','Pending',
'N','Not Opened') decode_status
MIN(a.period_name)
FROM table a,
table b
WHERE a.app_id = b.app_id
AND b.app_name = 'NAME1'
AND a.book_id = &book_id
AND a.status = 'O'
GROUP BY b.app_name,
DECODE (a.status,
'C','Closed',
'O','Open',
'F','Future',
'W','Pending',
'N','Not Opened') decode_status
for ex: in the above query if I've four records with status 'O' and period_name as 'May-12', 'Jun-12','Jul-12' ,'Aug-12' then I need to pick 'May'
Thanks,
KiranHi, Kiran,
user518071 wrote:
Hi,
I've a requirement to find minimum month based on status:
The following query is giving error :
SELECT
b.app_name,
DECODE (a.status,
'C','Closed',
'O','Open',
'F','Future',
'W','Pending',
'N','Not Opened') decode_status
MIN(a.period_name)
FROM table a,
table b
WHERE a.app_id = b.app_id
AND b.app_name = 'NAME1'
AND a.book_id = &book_id
AND a.status = 'O'
GROUP BY b.app_name,
DECODE (a.status,
'C','Closed',
'O','Open',
'F','Future',
'W','Pending',
'N','Not Opened') decode_status
for ex: in the above query if I've four records with status 'O' and period_name as 'May-12', 'Jun-12','Jul-12' ,'Aug-12' then I need to pick 'May'
Thanks,
KiranIt looks like you're almost there.
If period_name is a DATE, then
MIN (a.period_name)is finidng the earliest period name, such as 5 May 2012 17:03:49. If you just want to see 'May 2012', then change that to
TO_CHAR ( MIN (a.period_name)
, 'Mon YYYY'
)If a.period_name is a VARCHAR2, then change it to a DATE. The best way to do this is permanently. There is no reason to store date information in VARCHAR2 columns. Oracle supplies DATE columns; there's no extra cost for using them. DATE columns were designed for storing date information, use them to do that.
if you must keep your date information in VARCHAR2 a column, then use TO_DATE in the query. It will be slow, and you'll have run-time errors if any of the information is in the wrong format. That's what happens when you store date information in VARCHAR2 columns.
I hope this answers your question.
If not, post a little sample data (CREATE TABLE and INSERT statements, relevant columns only) for all tables involved, and also post the results you want from that data.
Explain, using specific examples, how you get those results from that data.
Always say which version of Oracle you're using.
See the forum FAQ {message:id=9360002} -
Sdo_nn is not showing desired results
Hello,
We have the following query :
SELECT p.codigo_proveedor_ca, p.descripcion AS Proveedor, DECODE(p.habitual,0,'N','S') AS HAB, DECODE(p.h_24,0,'N','S') H24,
b.codigo_base, b.tipo_via || ' ' || b.nom_via || ',' || b.numero_via || ' ' || B.PISO AS DIRECCION_PROV, b.codigo_pais,
b.codigo_provincia, b.codigo_ine, b.codigo_zona, mg.numero AS NUMERO_GEN, b.localidad, ROUND(MDSYS.SDO_NN_DISTANCE(1),0) AS DISTANCIA,
b.GIS_X, b.GIS_Y, b.GIS_NIVEL_XY, b.GIS_GEO_OK, b.GIS_TIPO_SRIDENUM
FROM SAT_BASES_PROVEEDORES b,
SAT_BASE_PROVEEDOR_MEDIOS_GEN mg,
SAT_PROVEEDORES_CA p
WHERE b.codigo_pais = 'ESP' AND b.activo = 1
AND mg.codigo_proveedor_ca = b.codigo_proveedor_ca AND mg.codigo_base = b.codigo_base
-- Medio Genérico 'TAXI'
AND mg.codigo_medio_generico = '2' AND mg.activo = 1 AND P.ACTIVO = 1
AND p.codigo_proveedor_ca = b.codigo_proveedor_ca
-- Coordinates of GRANOLLERS
AND SDO_NN(b.GEOMETRIA,MDSYS.SDO_Geometry(2001, 1000000,MDSYS.SDO_Point_type(188161,5043776,NULL),NULL, NULL) ,
'SDO_BATCH_SIZE = 25', 1 ) = 'TRUE'
ORDER BY DISTANCIA;
What we want is to get the providers which are near to a given town. To get this we are using SDO_NN function and also
SDO_NN_DISTANCE to calculate the distance to the given coordinates.
Our problem is that there are two providers with the same coordinates that should be shown in the query result but one of them is not shown and we don't understand why.
If we use SDO_NUM_RES instead of SDO_BATCH_SIZE the provider is shown, but as far as I know, if you use this parameter not all the WHERE clauses are evaluated. Am I wrong?
What are we doing wrong?
Thanks in advance,
Eva.Are you on Oracle 9i? In 9i, I have never been able to get this query to work successfully this way. I had to rewrite it to use a in-line view and a rownum and make some other changes. I think it is buggy, as are many of the 9i spatial objects (full of horrid memory leaks etc.)
I have been able to hack around the fact that it cannot find the nearest neighbor on it's own, by using an inline view in this way, but it has holes, I am sure:
Select DISTANCE, (list all your other selections) from
SELECT /*+ordered*/ SDO_NN_DISTANCE(1) DISTANCE, p.codigo_proveedor_ca, p.descripcion AS Proveedor, DECODE(p.habitual,0,'N','S') AS HAB, DECODE(p.h_24,0,'N','S') H24,
b.codigo_base, b.tipo_via || ' ' || b.nom_via || ',' || b.numero_via || ' ' || B.PISO AS DIRECCION_PROV, b.codigo_pais,
b.codigo_provincia, b.codigo_ine, b.codigo_zona, mg.numero AS NUMERO_GEN, b.localidad, ROUND(MDSYS.SDO_NN_DISTANCE(1),0) AS DISTANCIA,
b.GIS_X, b.GIS_Y, b.GIS_NIVEL_XY, b.GIS_GEO_OK, b.GIS_TIPO_SRIDENUM
FROM SAT_BASES_PROVEEDORES b,
SAT_BASE_PROVEEDOR_MEDIOS_GEN mg,
SAT_PROVEEDORES_CA p
WHERE b.codigo_pais = 'ESP' AND b.activo = 1
AND mg.codigo_proveedor_ca = b.codigo_proveedor_ca AND mg.codigo_base = b.codigo_base
-- Medio Genérico 'TAXI'
AND mg.codigo_medio_generico = '2' AND mg.activo = 1 AND P.ACTIVO = 1
AND p.codigo_proveedor_ca = b.codigo_proveedor_ca
-- Coordinates of GRANOLLERS
AND SDO_NN(b.GEOMETRIA,MDSYS.SDO_Geometry(2001, 1000000,MDSYS.SDO_Point_type(188161,5043776,NULL),NULL, NULL) ,
'SDO_BATCH_SIZE = 25', 1 ) = 'TRUE'
AND ROWNUM < 1000
ORDER BY DISTANCE
WHERE ROWNUM < 2';
This should give you the closest result. If you want the closest 2, you would set that in the last line. I had to mess around with the rownum < 1000 line in my query. It appears that the order by distance has no affect. If I set it to ROWNUM < 50, often times, the closest 2 items weren't in the inner select elements. So they weren't available in the outer results.
I also found this issue very frustrating. I actually had a hard time believeing it was so junky, until I proved it was the problem with this statement. Please let us know if it solves your issue also.
Maybe you are looking for
-
Error comes while save a smart style
Hi all While i am creating a smart style message comes 'Object can only be created in SAP package' .Then after creating a smrt style then when i am trying to save this smart style the error message comes like that 'SAP object [[style name]] cannot be
-
HI EXPERTS ! The transaction code for the report we r using is FBL1N - vendor ledger. we require the vendor's bank detail in this report at the header i.e. vendor bank name , account no..( basically change layout of report for output ) this detail ca
-
Extraction method for purchasing info
Hi all! I need some help with this (see the infosource section) [http://help.sap.com/saphelp_nw70/helpdata/en/ed/62073c44564d59e10000000a114084/frameset.htm ] as you can see the document says you can choose one of two methods of extraction. Could you
-
Aperture 2.1.4 crashes using Lion 10.7.2
I am not sure if it is just because I am now using Lion, but my editing software keeps crashing about ever 10 to 30 photos I go through. Its really frustrating especially when Im on a roll and I have to stop and wait for the program to reload. I have
-
I am trying to use the Magic Wand to highlight a dull sky so that I can add something more interesting. When I try to isolate this area, the magic wand seems to just make a random selection throughout my photo. I have anit-alias on, and my tolerance