Joining tables to return complete results
Dear allI have two tables
Table 1
SEQ Chassis EngineNo_ NO_ *.
1 11111111 E111111
2 22222222 E222222
3 33333333 E333333
Table 2
Vseq Chassis no Audit DATE_ *.
1 11111111 1/11 / 2008
2 22222222 1/11 / 2008
3 44444444 1/11 / 2008
I want to get the result as follows
Chassis EngineNo_ NO_ *.
11111111 E111111
E222222 22222222
E333333 33333333
44444444
Please note that the requirement is to get all the lines of table 1 and table 2 the removal of duplicates.
Can any body How to write this in PL/SQL
Thanks in advance
Mithra
Published by: user496263 on December 3, 2008 22:21
Why not try an outer join complete with separate
Select distinct tab2.Chassis_no,tab1.engine_no
from table1 tab1 full outer join table2 tab2
on tab1.Chassis_no =tab2.Chassis_no;
Published by: Rajneesh Kumar on December 4, 2008 12:12
Tags: Database
Similar Questions
-
DB connectivity Kit: syntax error in a SELECTION of data from joined tables
Hello everyone
I'm putting in labview a SQL query on joined tables.
As an example I take a database to store the data of basketball 2on2 matches, which tables are
corresponds to (matchId, Thomas, teamB)
teams (teamId,PlayerAname, PlayerBname, nationality)
nationalities (NatId, natName)
To get an array of result with the game as well as the names of player as well as their nationality, I use this query on MySQL (which works on command line interface)
SELECT MatchID,
T1. PlayerAName, t1. PlayerBName, n1.natName,
T2. PlayerAName, t2. PlayerBName, n2.natName
MATCHES m
INNER JOIN teams t1 ON t1.teamID = m.teamA
INNER JOIN teams t2 ON t2.teamID = m.teamB
INNER JOIN nationalities L1 ON n1.natID = t1.nationality
INNER JOIN nationalities n2 ON n2.natID = t2.nationalityWhen I put it in labview, using the block 'select data', I get a syntax error as shown in the attached screenshot.
Am I something mistanking using the JOIN examples statements or aliases?
Thanks in advance!
The select VI is designed to be a simple way to select from a table. I doubt that he can do joins (and would not certainly need the 'FROM', even if it can). What you can do instead calls the query execute VI and give him the complete SQL query. I don't remember if it returns the data in the recordset object, so you must do so separately.
-
query returns different results depends on the length of the day
Hello!
I have a query:
This query returns different results in the morning (09:00) and afternoon (16:00) on the same database for the same input data (I have prepared a script to test).INSERT /*+ APPEND */ INTO pwa_process ( id, id_session, id_customer, s2k_account, service_seq_num, msisdn, id_tariff, contract_end_date, last_contract_date, next_available_contract_date, tariff_name, description, description_long, imei_old, activation_date, id_customer_number, arpu, value0, value1, value2, value3, value4, value5, id_pricing_plan) WITH msisdns AS (SELECT msisdn ms FROM customer_number cn JOIN customer_s2kaccount cs ON cn.s2k_account = cs.s2k_account AND cs.id_customer = v_customerId) SELECT seq_pwa_process.NEXTVAL, v_sessionId, customer_s2kaccount.id_customer, customer_s2kaccount.s2k_account, customer_number.service_seq_num, msisdn.msisdn, tariff.id, NVL(CASE WHEN date_contract_end IS NULL AND le_contract_end_date IS NOT NULL OR (date_contract_end < le_contract_end_date) THEN le_contract_end_date ELSE NVL(date_contract_end, ADD_MONTHS(customer_number.date_start, customer_number.ada_availability)) END, TO_DATE('01.01.1970', 'DD.MM.YYYY')) contract_end_date, CASE WHEN NOT customer_number.date_first_activation IS NULL AND customer_number.date_first_activation > (CASE WHEN ada_priority = 1 THEN ada_date_pwa WHEN ada_priority <> 1 AND (date_pwa IS NULL AND exchange_date IS NOT NULL OR date_pwa < exchange_date) THEN exchange_date ELSE date_pwa END) THEN customer_number.date_first_activation ELSE (CASE WHEN ada_priority = 1 THEN ada_date_pwa WHEN ada_priority <> 1 AND (date_pwa IS NULL AND exchange_date IS NOT NULL OR date_pwa < exchange_date) THEN exchange_date ELSE date_pwa END) END last_contract_date, ADD_MONTHS(CASE WHEN NOT customer_number.date_first_activation IS NULL AND customer_number.date_first_activation > NVL( (CASE WHEN ada_priority = 1 THEN ada_date_pwa WHEN ada_priority <> 1 AND (date_pwa IS NULL AND exchange_date IS NOT NULL OR date_pwa < exchange_date) THEN exchange_date ELSE date_pwa END) , NVL(customer_number.date_first_activation, NVL(customer_number.date_start, customer_number.date_effective))) THEN customer_number.date_first_activation ELSE NVL( (CASE WHEN ada_priority = 1 THEN ada_date_pwa WHEN ada_priority <> 1 AND (date_pwa IS NULL AND exchange_date IS NOT NULL OR date_pwa < exchange_date) THEN exchange_date ELSE date_pwa END) , NVL(customer_number.date_first_activation, NVL(customer_number.date_start, customer_number.date_effective))) END, customer_number.ada_availability - DECODE(NVL(customer_number.current_contract_type, 0), 2, DECODE(customer_number.reduced_contract_used, 0, NVL(customer_number.el_contract_calculated_reduc,0), 0), 0)) next_available_contract_date, tariff.name_ada, DECODE(msisdn_group.def_column, 0, msisdn.value0, 1, msisdn.value1, 2, msisdn.value2, 3, msisdn.value3, 4, msisdn.value4, 5, msisdn.value5, msisdn.value0), msisdn.value0 || ';' || NVL(msisdn.value1, '') || ';' || NVL(msisdn.value2,'') || ';' || NVL(msisdn.value3,'') || ';' || NVL(msisdn.value4, '') || ';' || NVL(msisdn.value5, ''), customer_number.imei, NVL(customer_number.date_first_activation, NVL(customer_number.date_start, customer_number.date_effective)) date_start, customer_number.id, NVL(s2kaccount.arpu1,0), msisdn.value0, msisdn.value1, msisdn.value2, msisdn.value3, msisdn.value4, msisdn.value5, customer_number.id_pricing_plan FROM customer_s2kaccount JOIN customer_number ON customer_number.s2k_account = customer_s2kaccount.s2k_account AND customer_number.service_state = 'AB' JOIN msisdn ON msisdn.msisdn = customer_number.msisdn JOIN TABLE(CAST(v_tmp_table AS ADA.NUMBER_TABLE)) ids ON ids.column_value = msisdn.id JOIN msisdn_group ON msisdn_group.id = msisdn.id_msisdn_group JOIN pricing_plan ON pricing_plan.id = customer_number.id_pricing_plan AND pricing_plan.is_for_pwa = 1 JOIN tariff ON tariff.name = pricing_plan.id JOIN s2kaccount ON s2kaccount.s2k_account = customer_number.s2k_account LEFT JOIN (SELECT msisdn, exchange_date, ADD_MONTHS(exchange_date, MAX(prolongation)) le_contract_end_date FROM loyalty_exchange a, msisdns WHERE a.msisdn = msisdns.ms AND exchange_date >= ALL (SELECT exchange_date FROM loyalty_exchange b WHERE b.msisdn = a.msisdn) GROUP BY msisdn, exchange_date) le ON le.msisdn = customer_number.msisdn WHERE customer_s2kaccount.id_customer = v_customerId;
Oracle 9.2.0.6 @solaris
I checked the query plans, but they look the same in the morning and the afternoon. I don't know where to look for a problem/bug.
Please help me with suggestions. is in bug with join ansi? or a left outer join?
Published by: batonoff on February 16, 2009 16:56
Published by: batonoff on February 16, 2009 16:58
Published by: batonoff on February 16, 2009 17:00I recommend you post your declaration in the {} code tags (without the spaces) so that we can actually read.
You are absolutely positive that nothing has changed on the data between when you run in the morning and in the afternoon?
-
How to get a magic number for any table that returns more than 32 k?
I'm in a unique situation where in I try to extract the values of the multiple tables and to publish as XML output. The problem is based on the condition of a few tables can retrieve more than 32 KB and less than 32 KB of data. Less than 32KB is not a problem, as the generation of XML is smooth. The minute he reached more than 32 k, it generates a runtime error. I was wondering if there is a way to make sure that the minute results of the query is greater than 32 KB, it must break say - if results is 35KO, so should I break this result 32 KB and 3 KB. Once then pass these data to appear as XML output. Again, it is not just for a table, but all the tables which are called in the function.
Is it possible? I'm unable to get ideas, or did I do something so complex from the point of view of production support. If you'd be grateful if someone can guide me on this.
The way it is, is the following:
I have a table named ctn_pub_cntlCREATE TABLE CTNAPP.ctn_pub_cntl (ctn_pub_cntl_id NUMBER(18) ,table_name VARCHAR2(50) ,last_pub_tms DATE ,queue_name VARCHAR2(50) ,dest_system VARCHAR2(50) ,frequency NUMBER(6) ,status VARCHAR2(8) ,record_create_tms DATE ,create_user_id VARCHAR2(8) ,record_update_tms DATE ,update_user_id VARCHAR2(8) ,CONSTRAINT ctn_pub_cntl_id_pk PRIMARY KEY(ctn_pub_cntl_id) );
To do this, the data are:
INSERT INTO CTNAPP.ctn_pub_cntl (ctn_pub_cntl_id ,table_name ,last_pub_tms ,queue_name ,dest_system ,frequency ) VALUES (CTNAPP_SQNC.nextval ,'TRKFCG_SBDVSN' ,TO_DATE('10/2/2004 10:17:44PM','MM/DD/YYYY HH12:MI:SSPM') ,'UT.TSD.TSZ601.UNP' ,'SAP' ,15 ); INSERT INTO CTNAPP.ctn_pub_cntl (ctn_pub_cntl_id ,table_name ,last_pub_tms ,queue_name ,dest_system ,frequency ) VALUES (CTNAPP_SQNC.nextval ,'TRKFCG_TRACK_SGMNT_DN' ,TO_DATE('02/06/2015 9:50:00AM','MM/DD/YYYY HH12:MI:SSPM') ,'UT.TSD.WRKORD.UNP' ,'SAP' ,30 ); INSERT INTO CTNAPP.ctn_pub_cntl (ctn_pub_cntl_id ,table_name ,last_pub_tms ,queue_name ,dest_system ,frequency ) VALUES (CTNAPP_SQNC.nextval ,'TRKFCG_FXPLA_TRACK_LCTN_DN' ,TO_DATE('10/2/2004 10:17:44PM','MM/DD/YYYY HH12:MI:SSPM') ,'UT.TSD.YRDPLN.INPUT' ,'SAP' ,30 ); INSERT INTO CTNAPP.ctn_pub_cntl (ctn_pub_cntl_id ,table_name ,last_pub_tms ,queue_name ,dest_system ,frequency ) VALUES (CTNAPP_SQNC.nextval ,'TRKFCG_FXPLA_TRACK_LCTN2_DN' ,TO_DATE('02/06/2015 9:50:00AM','MM/DD/YYYY HH12:MI:SSPM') ,'UT.TSD.TSZ601.UNP' ,'SAP' ,120 ); INSERT INTO CTNAPP.ctn_pub_cntl (ctn_pub_cntl_id ,table_name ,last_pub_tms ,queue_name ,dest_system ,frequency ) VALUES (CTNAPP_SQNC.nextval ,'TRKFCG_FXPLA_TRACK_LCTN2_DN' ,TO_DATE('04/23/2015 11:50:00PM','MM/DD/YYYY HH12:MI:SSPM') ,'UT.TSD.YRDPLN.INPUT' ,'SAP' ,10 ); INSERT INTO CTNAPP.ctn_pub_cntl (ctn_pub_cntl_id ,table_name ,last_pub_tms ,queue_name ,dest_system ,frequency ) VALUES (CTNAPP_SQNC.nextval ,'TRKFCG_FIXED_PLANT_ASSET' ,TO_DATE('04/23/2015 11:50:00AM','MM/DD/YYYY HH12:MI:SSPM') ,'UT.TSD.WRKORD.UNP' ,'SAP' ,10 ); INSERT INTO CTNAPP.ctn_pub_cntl (ctn_pub_cntl_id ,table_name ,last_pub_tms ,queue_name ,dest_system ,frequency ) VALUES (CTNAPP_SQNC.nextval ,'TRKFCG_OPRLMT' ,TO_DATE('03/26/2015 7:50:00AM','MM/DD/YYYY HH12:MI:SSPM') ,'UT.TSD.WRKORD.UNP' ,'SAP' ,30 ); INSERT INTO CTNAPP.ctn_pub_cntl (ctn_pub_cntl_id ,table_name ,last_pub_tms ,queue_name ,dest_system ,frequency ) VALUES (CTNAPP_SQNC.nextval ,'TRKFCG_OPRLMT_SGMNT_DN' ,TO_DATE('03/28/2015 12:50:00AM','MM/DD/YYYY HH12:MI:SSPM') ,'UT.TSD.WRKORD.UNP' ,'SAP' ,30 ); / COMMIT;
Once the above data are inserted and committed, then I created a feature in a package:
CREATE OR REPLACE PACKAGE CTNAPP.CTN_PUB_CNTL_EXTRACT_PUBLISH IS TYPE tNameTyp IS TABLE OF ctn_pub_cntl.table_name%TYPE INDEX BY BINARY_INTEGER; g_tName tNameTyp; TYPE tClobTyp IS TABLE OF CLOB INDEX BY BINARY_INTEGER; g_tClob tClobTyp; FUNCTION GetCtnData(p_nInCtnPubCntlID IN CTN_PUB_CNTL.ctn_pub_cntl_id%TYPE,p_count OUT NUMBER ) RETURN tClobTyp; END CTNAPP.CTN_PUB_CNTL_EXTRACT_PUBLISH; --Package body CREATE OR REPLACE PACKAGE BODY CTNAPP.CTN_PUB_CNTL_EXTRACT_PUBLISH IS doc xmldom.DOMDocument; main_node xmldom.DOMNode; root_node xmldom.DOMNode; root_elmt xmldom.DOMElement; child_node xmldom.DOMNode; child_elmt xmldom.DOMElement; leaf_node xmldom.DOMNode; elmt_value xmldom.DOMText; tbl_node xmldom.DOMNode; table_data XMLDOM.DOMDOCUMENTFRAGMENT; l_ctx DBMS_XMLGEN.CTXHANDLE; vStrSqlQuery VARCHAR2(32767); l_clob tClobTyp; -- l_xmltype XMLTYPE; -- --Local Procedure to build XML header PROCEDURE BuildCPRHeader IS BEGIN child_elmt := xmldom.createElement(doc, 'PUBLISH_HEADER'); child_node := xmldom.appendChild (root_node, xmldom.makeNode (child_elmt)); child_elmt := xmldom.createElement (doc, 'SOURCE_APLCTN_ID'); elmt_value := xmldom.createTextNode (doc, 'CTN'); leaf_node := xmldom.appendChild (child_node, xmldom.makeNode (child_elmt)); leaf_node := xmldom.appendChild (leaf_node, xmldom.makeNode (elmt_value)); child_elmt := xmldom.createElement (doc, 'SOURCE_PRGRM_ID'); elmt_value := xmldom.createTextNode (doc, 'VALUE'); leaf_node := xmldom.appendChild (child_node, xmldom.makeNode (child_elmt)); leaf_node := xmldom.appendChild (leaf_node, xmldom.makeNode (elmt_value)); child_elmt := xmldom.createElement (doc, 'SOURCE_CMPNT_ID'); elmt_value := xmldom.createTextNode (doc, 'VALUE'); leaf_node := xmldom.appendChild (child_node, xmldom.makeNode (child_elmt)); leaf_node := xmldom.appendChild (leaf_node, xmldom.makeNode (elmt_value)); child_elmt := xmldom.createElement (doc, 'PUBLISH_TMS'); elmt_value := xmldom.createTextNode (doc, TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')); leaf_node := xmldom.appendChild (child_node, xmldom.makeNode (child_elmt)); leaf_node := xmldom.appendChild (leaf_node, xmldom.makeNode (elmt_value)); END BuildCPRHeader; --Get table data based on table name FUNCTION GetCtnData(p_nInCtnPubCntlID IN CTN_PUB_CNTL.ctn_pub_cntl_id%TYPE,p_Count OUT NUMBER) RETURN tClobTyp IS vTblName ctn_pub_cntl.table_name%TYPE; vLastPubTms ctn_pub_cntl.last_pub_tms%TYPE; BEGIN g_vProcedureName:='GetCtnData'; g_vTableName:='CTN_PUB_CNTL'; SELECT table_name,last_pub_tms INTO vTblName, vLastPubTms FROM CTN_PUB_CNTL WHERE ctn_pub_cntl_id=p_nInCtnPubCntlID; -- Start the XML Message generation doc := xmldom.newDOMDocument; main_node := xmldom.makeNode(doc); root_elmt := xmldom.createElement(doc, 'PUBLISH'); root_node := xmldom.appendChild(main_node, xmldom.makeNode(root_elmt)); --Append Table Data as Publish Header BuildCPRHeader; --Append Table Data as Publish Body child_elmt := xmldom.createElement(doc, 'PUBLISH_BODY'); leaf_node := xmldom.appendChild (root_node, xmldom.makeNode(child_elmt)); DBMS_SESSION.SET_NLS('NLS_DATE_FORMAT','''YYYY:MM:DD HH24:MI:SS'''); vStrSqlQuery := 'SELECT * FROM ' || vTblName || ' WHERE record_update_tms <= TO_DATE(''' || TO_CHAR(vLastPubTms, 'MM/DD/YYYY HH24:MI:SS') || ''', ''MM/DD/YYYY HH24:MI:SS'') ' ; -- || ' AND rownum < 16' --; DBMS_OUTPUT.PUT_LINE(vStrSqlQuery); l_ctx := DBMS_XMLGEN.NEWCONTEXT(vStrSqlQuery); DBMS_XMLGEN.SETNULLHANDLING(l_ctx, 0); DBMS_XMLGEN.SETROWSETTAG(l_ctx, vTblName); -- Append Table Data as XML Fragment l_clob(1):=DBMS_XMLGEN.GETXML(l_ctx); elmt_value := xmldom.createTextNode (doc, l_clob(1)); leaf_node := xmldom.appendChild (leaf_node, xmldom.makeNode (elmt_value)); xmldom.writeToBuffer (doc, l_clob(1)); l_clob(1):=REPLACE(l_clob(1),'<?xml version="1.0"?>', NULL); l_clob(1):=REPLACE(l_clob(1),'<', '<'); l_clob(1):=REPLACE(l_clob(1),'>', '>'); RETURN l_clob; DBMS_OUTPUT.put_line('Answer is' ||l_clob(1)); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.put_line('There is no data with' || SQLERRM); g_vProcedureName:='GetCtnData'; g_vTableName:='CTN_PUB_CNTL'; g_vErrorMessage:=SQLERRM|| g_vErrorMessage; g_nSqlCd:=SQLCODE; ctn_log_error('ERROR',g_vErrorMessage,'SELECT',g_nSqlCd,p_nInCtnPubCntlID,g_vPackageName,g_vProcedureName,g_vTableName); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('ERROR : ' || SQLERRM); ctn_log_error('ERROR',g_vErrorMessage,'OTHERS',g_nSqlCd,p_nInCtnPubCntlID,g_vPackageName,g_vProcedureName,g_vTableName); END GetCtnData; PROCEDURE printClob (result IN OUT NOCOPY CLOB) IS xmlstr VARCHAR2 (32767); line VARCHAR2 (2000); BEGIN xmlstr := DBMS_LOB.SUBSTR (result, 32767); LOOP EXIT WHEN xmlstr IS NULL; line := SUBSTR (xmlstr, 1, INSTR (xmlstr, CHR (10)) - 1); DBMS_OUTPUT.put_line (line); xmlstr := SUBSTR (xmlstr, INSTR (xmlstr, CHR (10)) + 1); END LOOP; END printClob; END CTN_PUB_CNTL_EXTRACT_PUBLISH;
If you notice my query:
vStrSqlQuery := 'SELECT * FROM ' || vTblName || ' WHERE record_update_tms <= TO_DATE(''' || TO_CHAR(vLastPubTms, 'MM/DD/YYYY HH24:MI:SS') || ''', ''MM/DD/YYYY HH24:MI:SS'') ' ; || ' AND rownum < 16' ;
The minute I comment
|| ' AND rownum < 16' ;
It generates an error because this query returns about 600 lines and all these lines must be published in XML format and the tragedy, is that it is a C program between institutions i.e. C calls my functions of packged and then will do all the processing. This will return the results to the C program. Then obviously C does not recognize the CLOB and somewhere in the process, I convert to VARCHAR or CLOB CLOB, I have to use VARCHAR as a return type. That's my challenge.
Someone who can help me find the number required of magic and also a brief knows how, I understand that. Thanks in advance.
Not that I would use it myself but your package can be simplified down, like this:
create or replace package ctn_pub_cntl_extract_publish is C_DTFORMAT constant varchar2(30) := 'YYYY-MM-DD HH24:MI:SS'; function getXMLData (p_table_name in varchar2, p_pub_tms in date) return xmltype; function getCTNData (p_id in number) return clob; end ctn_pub_cntl_extract_publish; / create or replace package body ctn_pub_cntl_extract_publish is function getXMLData (p_table_name in varchar2, p_pub_tms in date) return xmltype is v_query varchar2(32767) := q'{select * from $$TABLE_NAME where record_update_tms <= to_date(:1, 'YYYYMMDDHH24MISS')}'; ctx dbms_xmlgen.ctxHandle; doc xmltype; begin execute immediate 'alter session set nls_date_format = "'||C_DTFORMAT||'"'; v_query := replace(v_query, '$$TABLE_NAME', dbms_assert.simple_sql_name(p_table_name)); ctx := dbms_xmlgen.newContext(v_query); dbms_xmlgen.setBindValue(ctx, '1', to_char(p_pub_tms, 'YYYYMMDDHH24MISS')); dbms_xmlgen.setRowSetTag(ctx, p_table_name); dbms_xmlgen.setNullHandling(ctx, dbms_xmlgen.DROP_NULLS); doc := dbms_xmlgen.getXMLType(ctx); dbms_xmlgen.closeContext(ctx); return doc; end; function getCTNData (p_id in number) return clob is doc clob; begin select xmlserialize(document xmlelement("PUBLISH" , xmlelement("PUBLISH_HEADER" , xmlforest( 'CNT' as "SOURCE_APLCTN_ID" , 'VALUE' as "SOURCE_PRGRM_ID" , 'VALUE' as "SOURCE_CMPNT_ID" , to_char(sysdate, C_DTFORMAT) as "PUBLISH_TMS" ) ) , xmlelement("PUBLISH_BODY" , getXMLData(t.table_name, t.last_pub_tms) ) ) ) into doc from ctn_pub_cntl t where t.ctn_pub_cntl_id = p_id; return doc; end; end ctn_pub_cntl_extract_publish;
Function getXMLData() generates a canonical XML document out of the table that is passed as a parameter.
Function built getCTNData() code XML "PUBLISH", the document using SQL/XML functions, the getXMLData() call in the process and returns the content serialized as a CLOB.
-
SQL query return different result 11 GR 1 material and GR 11, 2
Problem: SQL returns different results in 11 GR 1 material and GR 11, 2 games.
Example script:
create the table tab_main
(
SOS number (2) not null,
contract number (2) null
)
/create the table tab_sub
(
number (2) of contract non-null,.
SOS number (2) null
)
/insert into tab_main values (1, 10);
insert into tab_main values (2, 20);
insert into tab_main values (3, null);
insert into tab_main values (4, null);insert into tab_sub values (1, 10);
insert into tab_sub (20, 2) values;
commit;The SQL code:
SELECT *.
OF tab_main.
tab_sub
WHERE tab_main.sos = tab_sub.sos (+) AND
tab_main. Contract = tab_sub.contract (+) and
tab_main. Contract not in (select 1 of the double);The above query gives more results
-by 11.2.0.4
1 10 10 1
2 20 20 2-in 11.1.0.7
1 10 10 1
2 20 20 2
4
3
Please tell us what could be the reason for the behaviour of offset lines thie.
Thank youPiesset
I think it is probably a bug in 11.1.0.7 (and possibly other versions), I get the same results as your 11.2.0.4 9.2.0.7, 10.2.0.3 and 11.2.0.3, and this is the result, I expect.
Your not in the paragraph is equivalent to:
SELECT *.
OF tab_main, tab_sub
WHERE tab_main.sos = tab_sub.sos (+) AND
tab_main. Contract = tab_sub.contract (+) and
tab_main. Contract <> 1;
Since you have null values in tab_main.contract they are lost by the predicate since null = value is never true (or false).
John
-
Columns of the sum of different record count of joined tables
I have a problem with a query, please help.
I have two tables:
Table 1create table rec_a (key_code varchar(20), TOT_AMT varchar(20), INV_AMT varchar(20)) / create table rec_B (key_code varchar(20), INVOICE_AMT varchar(20), PAID_AMT varchar(20)) / insert into REC_A values (123123, 1168182.16, 1168182.16); insert into REC_B values (123123, 205699.04,205699.04); insert into REC_B values (123123,130912.78,130912.78); insert into REC_B values (123123, 81622.87,81622.87); insert into REC_B values (123123, 438032.43,438032.43); insert into REC_B values (123123, 159936.17,159936.17); insert into REC_B values (123123, 151978.87,151978.87);
KEY_CODE TOT_AMT INV_AMT
123123 1168182.16 1168182.16
Table 2
KEY_CODE INVOICE_AMT PAID_AMT
123123 205699,04 205699.04
123123 130912,78 130912.78
123123 81622,87 81622.87
123123 438032,43 438032.43
123123 159936,17 159936.17
123123 151978,87 151978.87
I wrote a query to sum up all the areas (tot_amt, inv_amt, invoice_Amt, paid_amt)
I got this:SELECT B.key_code,sum(A.invoice_amt),sum(a.paid_amt),SUM(b.tot_Amt),SUM(b.inv_amt) FROM rec_a B, rec_b A WHERE A.KEY_CODE=B.KEY_CODE AND B.KEY_CODE in ('123123') group by B.key_code
KEY_CODE SUM (A.INVOICE_AMT) SUM (A.PAID_AMT) SUM (B.TOT_AMT) SUM (B.INV_AMT)
123123 1168182.16 1168182.16 7009092.96 7009092.96
But I expected this
KEY_CODE SUM (A.INVOICE_AMT) SUM (A.PAID_AMT) SUM (B.TOT_AMT) SUM (B.INV_AMT)
123123 1168182.16 1168182.16 1168182.16 1168182.16
Can someone help me out here?
Thank you
Published by: 1003064 on April 29, 2013 03:19Hello
1003064 wrote:
I have a problem with a query, please help.I have two tables:
Table 1
KEY_CODE TOT_AMT INV_AMT
123123 1168182.16 1168182.16Table 2
KEY_CODE INVOICE_AMT PAID_AMT
123123 205699,04 205699.04
123123 130912,78 130912.78...
123123 81622,87 81622.87
123123 438032,43 438032.43
123123 159936,17 159936.17
123123 151978,87 151978.87I wrote a query to sum up all the areas (tot_amt, inv_amt, invoice_Amt, paid_amt)
SELECT B.key_code, sum (a.invoice_amt), sum (a.paid_amt), SUM (b.tot_Amt), SUM (b.inv_amt) FROM rec_a A, rec_b B WHERE A.KEY_CODE = B.KEY_CODE AND B.KEY_CODE in ('123123')
B.key_code groupI got this:
KEY_CODE SUM (A.INVOICE_AMT) SUM (A.PAID_AMT) SUM (B.TOT_AMT) SUM (B.INV_AMT)
123123 1168182.16 1168182.16 7009092.96 7009092.96But I expected this
KEY_CODE SUM (A.INVOICE_AMT) SUM (A.PAID_AMT) SUM (B.TOT_AMT) SUM (B.INV_AMT)
123123 1168182.16 1168182.16 1168182.16 1168182.16Thus, the last 2 columns must be exactly what is stored in table1? Then either
b include these columns in the GROUP BY clause and not to use the SUM,
(b) the GROUP BY on rec_a alone, separately, can't join the results to the rec_b, or
(c) using MIN or MAX, instead of SUM. (Anyone. Since there is only one value, MIN will be the same as MAX.)Here is an example of (a):
SELECT B.key_code , sum (a.invoice_amt) AS sum_invlice_amt , sum (a.paid_amt), AS sum_paid_amt , b.tot_Amt , b.inv_amt FROM rec_a A , rec_b B WHERE A.KEY_CODE = B.KEY_CODE AND B.KEY_CODE in ('123123') group by B.key_code , b,tot_amt , b.inv_amt ;
I hope that answers your question.
If not, post a small example of data (CREATE TABLE and only relevant columns, INSERT statements) for all of the tables involved and the results desired from these data.
Point where the above query is to produce erroneous results, and explain, using specific examples, how you get the right results from data provided in these places.
Always say what version of Oracle you are using (for example, 11.2.0.2.0).
See the FAQ forum {message identifier: = 9360002} -
Hi all
I'm just on my first step, trying to understand the operation of Oracle BI EE.
I'm at http:// [our bi Server]: 9704/analytics/saw.dll? IssueRawSQL is the Administration-> SQL question section.
My sql statement
Returnsselect id, userid from zvit.marco_test1
This information has been effective yesterday, but today the toad returns another result:"MARCO_TEST1"."ID" "MARCO_TEST1"."USERID" double double 1.00 2.00
select id, userid from zvit.marco_test1
What is a max? How can I get real result?ID USERID ---------- ---------- 0 2 1 row selected.
We have an option in the RPD to disable the cache for a specific table.
Open - physical table--> properties--> general tab uncheck the wire
check if useful/correct...
Thank you
prassu -
What happens if we want to join table DOUBLE with another table?
Gul says:
What happens if we want to join table DOUBLE with another table?Not really would you use an equi-join on double because it will always contain a single row and column. Cartesian double with one of the tables will result in the same set of rows, which is at the Table.
When we get the same result from Tables, why do we use double then?
Double table is just a convenience table which is / was used to extract the sequence next/Currval, in order to calculate the level of generation etc. Dates missing to know. For more information of the Table double, please read the thread from Tom Kyte. Everything about Table double.
-
PHP function returns incorrect result [was: I'm really confused]
I'm working on navigation for a messaging system I create. This is the code that I have problems with:
function getPreviousMessageID ($mid) {}
global $connection;
$message_sets = getMessageID ("first");
$messages = mysql_fetch_assoc ($message_sets);
If ($mid < $messages ['id']) {}
$mid ++;
$sql = "SELECT."
Messages
ID WHERE = {$mid}
LIMIT 1 ";
$message_set = mysql_query ($sql, $connection);
$message = mysql_fetch_assoc ($message_set);
{if (!) Empty ($message))}
return $message ['id'];
} else {}
If ($mid < $messages ['id']) {}
getPreviousMessageID ($mid);
} else {}
return 0;
}
}
} else {}
return 0;
}
}function getNextMessageID ($mid) {}
global $connection;
$message_sets = getMessageID ("last");
$messages = mysql_fetch_assoc ($message_sets);
{If ($mid > {$messages ['id'])}
$mid;
$sql = "SELECT."
Messages
ID WHERE = {$mid}
LIMIT 1 ";
$message_set = mysql_query ($sql, $connection);
$message = mysql_fetch_assoc ($message_set);
{if (!) Empty ($message))}return $message ['id'];
} else {}
If ($mid > 1) {}
getNextMessageID ($mid);
} else {}
return 0;
}
}
} else {}
return 0;
}
}I don't know why that would be, but it seems that these functions operate correctly if they return a value which is right next to one that is initially placed in the service. Otherwise, they return empty. I said earlier the functions of echo $message ['id']. This works great and echoes the id that it should. However, if this id is not directly next to one that was originally entered, it returns empty. I don't know if the function is not return it is supposed to or if not the variable that is supposed to take the variable returned his interception. I find it a bit odd that it works only some of the time. If you find the above to be a bit confusing, let me give you an example:
I have 3 lines in the table of messages. They have the ID of 4, 7 and 8. If 8 is put into functions, getNextMessageID returns 7 and getPreviousMessageID returns 0. That's what you expect. Now, if you put 7 functions, getPreviousMessageID returns 8. What needs to happen, but getNextMessageID returns completely empty. He is yet to return 0. Yet when I echo $message ['id'] in the getNextMessageID, he says 4, which is what you expect to happen. Now, if 4 is put into functions, getNextMessageID returns 0. This is what must happen. The getPreviousMessageID functions, however, returns completely empty. When I echo $message ['id'] in the function getPreviousMessageID, it says 7. That's what it says.
I'm really confused. These functions work only part of the time. The rest of the time, the value is getting lost somewhere. Does anyone have any idea as to why this is happening or a possible fix? Thank you in advance for looking at my code.
doheja07 wrote:
I have 3 lines in the table of messages. They have the ID of 4, 7 and 8. If 8 is put into functions, getNextMessageID returns 7 and getPreviousMessageID returns 0. That's what you expect. Now, if you put 7 functions, getPreviousMessageID returns 8. What needs to happen, but getNextMessageID returns completely empty. He is yet to return 0.
Yes, it's exactly what I expected. The ID is not consecutive - and will never, because the primary key is not reused when a record is deleted. For example, when you use 7, $mid - reduced to 6, which is then passed to the SQL query. Because there is no 6 ID in the database, $message_set is null.
When you search for the higher or lower value following, do not specify the value yourself, because you have no way of knowing if the number is a lower or higher. Use upper and lower. Do not change the value of $mid. The following will get the next higher number.
SELECT id FROM messages WHERE id > $mid LIMIT 1
-
Basic there IS NO query didn't return any results
DB version: 10 gr 2
One of our tables in the schema of the test is to have less number of columns as the shema of PROD.
To determine missing columns of this table in the Test schema, I did the following.
-In the scheme of prod-----In Test Schema CREATE TABLE XYZ2 (COL1 NUMBER); ----------only one column SQL > CREATE TABLE tables_test_list AS SELECT TABLE_NAME,COLUMN_NAME FROM USER_TAB_COLS; Table created.
And the scheme of PROD I have run the following SQL to determine what are the columns that do not appear in the TEST schemaSQL> CREATE TABLE XYZ2 2 (COL1 NUMBER, 3 COL2 NUMBER ----------- same table name with an extra column 4 ); Table created
But the above query returns no results. No idea why?select column_name from User_Tab_Cols outer where table_name='XYZ2' and not exists (select 1 from TEST_SCHEMA.tables_test_list inner where outer.TABLE_NAME=inner.TABLE_NAME )
10 gr 2 is not a version. Version numbers have four numbers and no letters.
Your statement is simply not true.
It returns nothing if registration occurs in both tables, as you test existence: the number of records, according to your request is irrelevant.Differences can and should be identified by a simple less,
Select...
FROM table1
less
Select...
from table2----------
Sybrand Bakker
Senior Oracle DBA -
Research component returns incomplete results
The search pane always returns incomplete results. For example, to find all files that have been changed since April 8. Several files are returned-, but two files I modified TEN MINUTES ago aren't. And who knows how many others were not returned.
How does search pane decided not to include files which should, and why? What is the solution to make it work properly?
If you have any Google products installed on your system, they can take over functions normally performed by Vista (in this case, the advanced search function). Google does (and sometimes without warning or notification). You should be able to access the Vista advanced search function by pushing the search button in the Start Menu (assuming that Google has not only taken over as well).
Thanks for the comments!
Good luck!
Lorien - MCSA/MCSE/network + / has + - if this post solves your problem, please click the 'Mark as answer' or 'Useful' button at the top of this message. Marking a post as answer, or relatively useful, you help others find the answer more quickly.
-
How can I return a result of popup to parent form
Hi guys
This is probably a very simple question.
How can I return a result of popup to parent form?
Thank you
Hi dpolonsky,
due to the fact that your screen popup and parent are in classes separated.
So create your own set and get methods/functions that can be called from another class.
Because the variables are known only in the class, they were defined (information hiding), then you must use the functions/methods, that affects the apropriate values.
in your parent class, you can define a method like:
void setFromPopup (int intval) {}
intval = globalintvalfrompopup; globalintcalfrompopup is declared globally within your class
}
and in your child (popup) class, you can call via
.
.
int TestInt = 10;
parentclass.setFromPopup (testint);
.
.
It is a general question of JAVA.
Hope it helps.
-
OBIEE logical column has same SQL but returns different results
I have a SQL query with a case statement that returns the correct results by operating in Oracle SQL Developer. I've created several logical columns in OBIEE, one for each case in the original query. However, the results returned by each logical column OBIEE are radically different from the original SQL query results, even if the SQL code is virtually identical.
For example, a column logical OBIEE that returns incorrect results contains the following SQL code:
SUM (CASE when
("Registration - College". "" Effective colleges F. ("" Postal code "like '% a %') or
("Registration - College". "" Effective colleges F. ("" Postal code "like '%B %') or
("Registration - College". "" Effective colleges F. ("" Postal code "like '%c %') or
("Registration - College". "" Effective colleges F. ("" Postal code "like"% %") or
("Registration - College". "" Effective colleges F. ("" Postal code "like '%G %') or
("Registration - College". "" Effective colleges F. ("" Postal code "like"hour %") or
("Registration - College". "" Effective colleges F. ("" Postal code "like"%%J") or
("Registration - College". "" Effective colleges F. ("' Postal code ' like '%R %') or
("Registration - College". "" Effective colleges F. ("" Postal code "like '%s %') or
("Registration - College". "" Effective colleges F. ("" Postal code "like '%T %') or
("Registration - College". "" Effective colleges F. ("" Postal code "like"% %") or
("Registration - College". "" Effective colleges F. ("" Postal code "like '%x %') or
("Registration - College". "" Effective colleges F. ("' Postal code ' like '%Y %')
THEN 0 OTHERWISE 1 END)
The case statement in the original SQL query, which returns the correct results, is as follows:
CASE
WHEN (postal_zip_code_permanent like "%%K") or (postal_zip_code_permanent like '% %') or (postal_zip_code_permanent like '%m %') or (postal_zip_code_permanent like '%n %') or (postal_zip_code_permanent like "%p %") THEN "Ontario".
WHEN (postal_zip_code_permanent like '% a %') or (postal_zip_code_permanent like '%B %') or (postal_zip_code_permanent like '%c %') or (postal_zip_code_permanent like '% %') or (postal_zip_code_permanent like '%G %') or (postal_zip_code_permanent like "%hour") or (postal_zip_code_permanent like "%%J") or (postal_zip_code_permanent like "%%R") or (postal_zip_code_permanent like '%s %') or (postal_zip_code_permanent like '%t %') or (postal_zip_code_permanent like '% %') or (postal_zip_ code_permanent like '%x %') or (postal_zip_code_permanent like "%%Y") THEN "Canada, other than Ontario.
WHEN (substr(postal_zip_code_permanent,1,1) IN ('1 ', '2', '3', '4', '5', '6' ', 7',' 8 ', ' 9',' 0') or (postal_zip_code_permanent like '%d %') or (postal_zip_code_permanent like '%f %') or (postal_zip_code_permanent like ' % I %') or (postal_zip_code_permanent like "% O") or (postal_zip_code_permanent like "%%Q") or (postal_zip_code_permanent like "%%U") or (postal_zip_code_permanent like ' % W ') or (postal_zip_code_permanent like "%%Z")) THEN 'other')
WHEN (postal_zip_code_permanent like '% + %') or (postal_zip_code_permanent like '%. %') or (postal_zip_code_permanent like ' %? %') or (postal_zip_code_permanent like '% %') or postal_zip_code_permanent IN ('+ ','.', '?)) (',',') And THEN "Invalid."
WHEN postal_zip_code_permanent is null THEN 'Blank '.
Of OTHER postal_zip_code_permanent
END
Now I see what the problem was. In the original SQL query, each condition is exclusive, for each record will only be categorized in one of the scenarios WHEN. But in OBIEE, each logical column is autonomous, so some records were classified into more than logical column, even if each logical column was supposed to be exclusive.
-
Return custom results, the value of the service
Hi all
Can return us customized results, the value of a personalized service?
We plan to write a wrapper for the Service of research and return the result set custom when that service is called. Any body tried this approach before and do you know what are the advantages and disadvantages of this approach.
1. resources Service file. CheckReleaseState is the personal name of resultset.
2 file query of the resource.
Run your custom service and then access the resultset in java using the line below:
DataResultSet searchDataResultSet = new DataResultSet();
searchDataResultSet.copy (binder.getResultSet ("CheckReleaseState"));
-
PLSQL function to return the result of the query
Dear all,
Oracle Database SE1 11.2.0.1
I need to create a plsql function which should accept SQL as a parameter, execute it and return the result set.
Is this possible?
Madhu.149 wrote:
I need to create a plsql function which should accept SQL as a parameter, execute it and return the result set.
Be careful - results games indicate a set of data stored in memory. This is not what are sliders. This isn't how Oracle should be used.
Imagine that you implement such a result set function - which, on average, requires 1 MB of memory (private server) to store the results of the SQL query. A 100 users mean a 100 MB of memory required server. This is not suitable. Not at all. Never.
The correct back 'thing' is a handle to SQL cursor (called a ref cursor in this case). A SQL cursor is a "program" - that the appellant runs via the fetch command and generates one or more lines accordingly. Appellant repeatedly runs this slider through calls to fetch until this slider found and returns all rows affected (using consistent readings).
If you want an abstraction interface that the client can call via PL/SQL code in the database, so this crafting optimal SQL interface, creates the SQL cursor and returns the handle of the cursor (via the ref cursor data type) to the client.
Maybe you are looking for
-
Tecra M3 - touchpad does not work with Windows 7
I have a Tecra M3 I've updgraded to Windows 7. The touchpad does not work.The Web of Toshiba site has a Windows 7 drivers for this model. I tried install the driver of the touchpad and PVAT from the A11 model but still cannot make it work. Can anyone
-
DVD Super Multi (Double Layer) drive does not not in Satellite A200 - 1 M 4
In A200 - 1 M 4, suddenly DVD Super Multi (Double Layer) is not in operation.In Device Manager, the device is listed with an exclamation mark? I tried to restore the system, but the system restore does not work also. Operating system is Windows Vista
-
Zoo Tycoon: complete collection language problems
I bought zoo tycoon but it's in German, how can I change it to English?
-
Need driver for printer Samsung ML-1520 on Windows 7 Ultimate
Need driver for printer Samsung ML-1520 on Windows 7 Ultimate
-
'Windows 7 Build 7601 this copy of windows not genuine' how to fix this?
I have an original windows 7 Professional and I get this message that it is not authentic. I have a run Diagnostic tests and here is the result. What it means? Diagnostic report (1.9.0027.0):-----------------------------------------Validation of Wind