Joins with caluclated columns

If we are having two projections with different analytic views , can we create caluclated column in one of it and join with other projection ?

Hi Ravi,
There seems to be a bug when i try to create join between caluclated column and original colum its getting joined with multiple columns during visibilty.
Once views get activated its joining correctly

Similar Messages

  • Outer join with tow columns foreign key

    If I want to select from two tables (A and B) with outer join on table "B" and I have two columns foregn key between the two tables what is the correct way:
    1)
    ...from A,B
    where A.key1 = B.key1 (+)
    and A.key2 = B.key2 (+)
    2)
    ...from A,B
    where A.key1||A.key2 = B.key1||B.key2 (+)
    thank you,
    ENdre

    #1

  • Problem with outer join with filter on join column

    Hi,
    In physical layer I have one dimension and two facts, and there's an outer join between the facts.
    dim_DATE ,
    fact_1 ,
    fact_2
    Joins:
    dim_DATE inner join fact_1 on dim_DATE.DATE = fact_1.DATE
    fact_1 left outer join fact_2 on fact_1.DATE = fact_2.DATE and fact_1.SOME_ID = fact_2.SOME_ID
    When I run a report with a date as a filter, OBIEE executes "optimized" physical SQL:
    select fact1.X, fact2.Y
    from
    Fact_1 left outer join on fact_1.DATE = fact_2.DATE and fact_1.SOME_ID = fact_2.SOME_ID
    where Fact_1.DATE = TO_DATE('2009-05-28' , 'YYYY-MM-DD' )
    and  Fact_2.DATE = TO_DATE('2009-05-28' , 'YYYY-MM-DD')
    The filter on Fact_2.DATE effectively replaces outer join with inner.
    Is there a way to disable this "optimization", which is actually very good for inner joins, but doesn't allow outer joins?
    Thanks in advance,
    Alex
    Edited by: AM_1 on Aug 11, 2009 8:20 AM

    If you want to perform a Fact-based partitioning with OBIEE (two fact with the same dimension), you have to :
    * create in your physical layer for each fact table the joins with the dimension
    * create in the Business Model layer ONE star schema with ONE logical fact table containing the columns of your two physical fact table
    In this way when you choose minimal one column of your fact1 and one column of your fact2, OBIEE will perform two query against each fact table/dimension, join them with an OUTER JOIN and your problem will disappear.
    Cheers
    Nico

  • Join columns of outer join with table have no uniqueness cons

    Hi! I'm getting noizy error in alert log from time to time:
    Join columns of outer join with table <table_name> have no uniqueness constraints
    I've collected all the queries (v$sql, all_source) with montioned table, but non of them produces that error if executed.
    Any hints how to reproduce this error or where else to search that buggy sql join?
    Edited by: user545083 on 25.10.2010 6:21

    Hi
    I think this error is output via an materialized view refresh - check for mviews against the given table which fulfil the issue given in the error text.
    Thanks
    Paul

  • Many to many join table with different column names

    Hi have a joint table with different column names as foreign keys in the joining
    tables...
    e.g. i have a many to many reltnshp btwn Table A and Table B ..and join table
    C
    both have a column called pk.
    and the join table C has columns call fk1 and fk2
    does cmd require the same column name in the join table as in the joining table?
    are there any workarounds?
    thanks

    HI,
    No, the foreign key column names in the join table do not have to match the primary
    key names in the joined tables.
    -thorick

  • Inner join with data also from non having join column

    I have an Dim table which has to be joined with Fact Table using inner join, but also display the Dimension value " MasterGroup " inspite of data present or not in the fact table.
    My Query:  .. This is an part of my stored procedure with more tables
    SELECT a.SalesAmount, b.HeaderGroup ,c.CityName
    FROM dbo.FactItem a
    inner join dbo.[DimHeader] b
    on a.sid = b.sid
    left join dbo.DimCity c
    on a.cityid = c.id
    My DimHeader Table will have data like
    MasterGroup
    ChildGroup
    etc...
    which is an attribute.
    There might not be any relevent fact data, but still i want the dimension data to display the "MasterGroup"
    ShanmugaRaj

    hello ,
    usually this is not possible when the column you want to display when the matches not found from a table having a distinct values which are hard to declared static..
    you can incorporate something like this if you cant change the join type ..
    select distinct HeaderGroup from dbo.[DimHeader] tbl_outerleft join (SELECT a.sid,a.SalesAmount, b.HeaderGroup ,c.CityName
    FROM dbo.FactItem a
    inner join dbo.[DimHeader] b
    on a.sid = b.sid
    left join dbo.DimCity c
    on a.cityid = c.id) tbl_Main on tbl_Main.sid =tbl_outer.sid
    Dilip Patil..

  • Pl sql join and selecting columns from join."t"."c": invalid at debug time

    I noticed the error at cc.Country that is shown because cc is not yet there at compile time (got that
    from searching this forum).
    Isnt that a bit weak of oracle sql developer that it doesnt compile from the outside to the inside /core but
    rather form top to bottom?
    Am I right with my conclusion? If so, how to do it otherwise i.e. specifying that cc.country is
    a column from countrycodes joined with table6 ?
    SELECT DISTINCT 0,
    2,
    SUBSTR('metable', 0, 1) || '_ABC',
    'ABC_' || 'metable',
    'ABC ' ||cc.Country ,
    '+'
    FROM table6
    LEFT JOIN COUNTRYCODE cc
    ON cc.Code = metable
    WHERE metable IS NOT NULL
    AND metable <> ''

    metalray wrote:
    hi Boneist
    thanks for your reply
    its in a plsql procedure (10g). well as you see cc is the alias
    of the table COUNTRYCODE. which does exists. the error is at 'ABC ' ||cc.Country'
    telling me"PL/SQL: ORA-01747: invalid user.table.column,..."
    when I put COUNTRYCODE next to table6 in the FROM it works but thats not what I want
    since I want to join both tables not just select from both.Can you give us your exact code and exact error message.
    I'm not finding any problem with using alias names in the query..
    SQL> select d.dname
      2        ,'EMPNAME : '||e.ename
      3  from dept d LEFT JOIN emp e ON e.deptno = d.deptno;
    DNAME          'EMPNAME:'||E.ENAME
    RESEARCH       EMPNAME : SMITH
    SALES          EMPNAME : ALLEN
    SALES          EMPNAME : WARD
    RESEARCH       EMPNAME : JONES
    SALES          EMPNAME : MARTIN
    SALES          EMPNAME : BLAKE
    ACCOUNTING     EMPNAME : CLARK
    RESEARCH       EMPNAME : SCOTT
    ACCOUNTING     EMPNAME : KING
    SALES          EMPNAME : TURNER
    RESEARCH       EMPNAME : ADAMS
    SALES          EMPNAME : JAMES
    RESEARCH       EMPNAME : FORD
    ACCOUNTING     EMPNAME : MILLER
    OPERATIONS     EMPNAME :
    15 rows selected.
    SQL>

  • Report with multiplying columns  and WITH clause

    Hello
    I saw sth strange in my report. I assume that it could happens very often.
    I have report with few columns which two of them ar most complicated (many joins subqueries aggreagations on joined values etc.) These two columns (i.e C3,C4) should be multiplied (C3*C4).
    When i do pure report without multiplying only columns C1,C2,C3,C4 everything is ok - duration about 15 sec. but... when I put next column on report which multiply these columns (in Answers C5=C3*C4)
    I wait 3-4 minutes and my database hungs :(. After investigation I saw that in first case to databese goes pure "SELECT" statement it means:
    "Select ... as C1, ... as C2, max(...) as C3, sum(xxx)... C4 from yyy,sss,ttt WHERE aaa"
    but in second case BI uses WITH clause it means:
    WITH SAWITH0 AS
    ( Select ... as C1, ... as C2, max(...) as C3, sum(xxx)... C4 from yyy,sss,ttt WHERE aaa )
    SELECT SAWITH0.C1 as C1,
    SAWITH0.C2 as C2,
         SAWITH0.C3 as C3,
         SAWITH0.C4 as C4,
         SAWITH0.C3*SAWITH0.C4 as C5 FROM SSS
    and this statement is long runninq query and kills my database :(.
    I checked that SQL like this:
    Select ... as C1, ... as C2, max(...) as C3, sum(xxx)... C4, max(...)*sum(xxx)... As C5 from yyy,sss,ttt WHERE aaa" -
    runs few times faster than that above
    I know that I can do this multiply in business model layer but sometimes users can multiply(or other operations) on columns in reports without my knowledge and it kills my db :(. Where is bug? Why SQLs with WITH clause takes so much db time?
    Thank you for each kind of help

    WITH clause or Subquery Factoring allows the set of data to be reused multiple times within the SQL. Oracle will usually materialize the data into a temporary table (you will see it if you take an explain plan of the SQL).
    I would be surprised if it was the actual WITH clause that was causing the performance issue, however you can test this by turning the WITH clause feature off. Go to the Physical model, right mouse click on your Database > Properties > Features Tab, scroll down to WITH_CLAUSE_SUPPORTED and switch it off.
    I'd be interested to know if you do see actual improvement.
    Good Luck.

  • Join with count() issue, please help!

    Hello All,
    I have this (probably really simple) issue that I cannot seem to resolve...I have 2 tables here (tbl_system_engineer and tbl_task_request)...(only relevant columns are listed below)
    tbl_system_engineer
    - id NUMBER
    - full_name VARCHAR2
    tbl_task_request
    - tr_number NUMBER
    - submitted_on_date DATE (date task was submitted)
    - ass_comp_date DATE (date task is due)
    - closed_date DATE (date task was officially closed)
    - requestor NUMBER (the system engineer id, the person who created this task)
    The query is supposed to summarize how many of the system engineers tasks are as followed:
    - "past completion date" - how many tasks have tbl_task_request.closed_date > tbl_task_request.ass_comp_date OR SYSDATE > tbl_task_request.ass_comp_date for the engineer
    - "Approaching Completion Date" - how many tasks have a tbl_task_request.ass_comp_date in this month but not "past completion date" for the engineer
    - "On Schedule" - how many tasks have a tbl_task_request.ass_comp_date > the end of SYSDATE month and year
    The result set rows are supposed to look like...
    "System Engineer full name", past completion date count, approaching completion date count, on schedule count
    Please help!

    Hi,
    Welcome to the forum!
    That's an example of a Pivot , where you want to GROUP BY a combination of columns, and have some of the columns appear as different columns, not different rows.
    The way to do that is to GROUP BY the expression(s) for which you want rows, and use CASE expressions for the others.
    For example:
    SELECT       e.full_name
    ,       COUNT ( CASE
                   WHEN  r.closed_date     > r.xyz_comp_date
                   OR    SYSDATE          > r.xyz_comp_date
                   THEN  1
                  END
                )     AS overdue
    ,       COUNT ( CASE
                   WHEN  xyz.comp_date     <  ADD_MONTHS ( TRUNC(SYSDATE, 'MONTH')
                                                      , 1
                   AND   r.closed_date     <= r.xyz_comp_date
                   AND   SYSDATE          <= r.xyz_comp_date
                   THEN  1
                  END
                )     AS approaching
    ,       COUNT ( CASE
                   WHEN  xyz.comp_date     >= ADD_MONTHS ( TRUNC(SYSDATE, 'MONTH')
                                                      , 1
                   THEN  1
                  END
                )     AS on_schedule
    FROM       tbl_system_engineer     e
    JOIN       tble_task_request     r     ON     r.requestor     = e.id
    GROUP BY  e.full_name
    ;I don't have versions of your tables, so I can't actually test this. I suspect that some consideration for NULLs needs to be added to the CASE conditions.
    if you post a little sample data (CREATE TABLE and INSERT statements, relevant columns only) then people can test their ideas.
    Sometimes, especially when the columns are mutually exclusive, it's simpler to calculate a value in a sub-query, telling with which column of output each row is associated. That computed value is then used in very simple CASE expressions in the main query,
    Among the annoying features of this site is ithat ir replaces what it thinks are naughty words with s.  I suspect that happend in your post.  I assume all the columns with ** are the same, for which I substituted above.

  • Outer join With a constant value

    Hi all,
    In one of query i have found out that the outer join with a constant value like
    to_currency(+)='USD'
    to_currency is a column name in a table.can any one please explain this outer join condtn.
    Thanks in advance
    Senthil

    Hallo,
    if you write var (+) = constant
    var can be equal constant, and also can be null
    Compare these 2 queries
    select e.* from scott.emp e, scott.dept d
    where e.deptno = d.deptno(+)
    and d.deptno(+) = 10EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    7369     SMITH      CLERK      7902     17-Dez-1980     800          20
    7499     ALLEN      SALESMAN      7698     20-Feb-1981     1600     300     30
    7521     WARD      SALESMAN      7698     22-Feb-1981     1250     500     30
    7566     JONES      MANAGER      7839     2-Apr-1981     2975          20
    7654     MARTIN      SALESMAN      7698     28-Sep-1981     1250     1400     30
    7698     BLAKE      MANAGER      7839     1-Mai-1981     2850          30
    7782     CLARK      MANAGER      7839     9-Jun-1981     2450          10
    7788     SCOTT      ANALYST      7566     19-Apr-1987     3000          20
    7839     KING      PRESIDENT           17-Nov-1981     5000          10
    7844     TURNER      SALESMAN      7698     8-Sep-1981     1500     0     30
    7876     ADAMS      CLERK      7788     23-Mai-1987     1100          20
    7900     JAMES      CLERK      7698     3-Dez-1981     950          30
    7902     FORD      ANALYST      7566     3-Dez-1981     3000          20
    7934     MILLER      CLERK      7782     23-Jan-1982     1300          10
    select e.* from scott.emp e, scott.dept d
    where e.deptno = d.deptno(+)
    and d.deptno = 10 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    7782     CLARK      MANAGER      7839     9-Jun-1981     2450          10
    7839     KING      PRESIDENT           17-Nov-1981     5000          10
    7934     MILLER      CLERK      7782     23-Jan-1982     1300          10
    As you can see, this (+) is very important
    Regards
    Dmytro

  • Outer Join with the query

    I have written the below query, our requirement is, Some employees have "Transport Allowance" but not "Project Allowance". For this, I tried to use OUTER JOIN with this query. But this query takes long time and failed. The following query works fine if the employee has both "Transport Allowance" and "Project Allowance" (without outer join) Now, I also need to retrieve the employees who have "Transport Allowance" but not "Project Allowance". How can I retrieve it?
    SELECT DISTINCT papf.employee_number
    , peev.screen_entry_value Transport_Allowance
    ,peev1.screen_entry_value Project_Allowance
    FROM apps.per_all_people_f papf
    ,apps.per_all_assignments_f paaf
    ,apps.pay_element_types_x petf
    ,apps.pay_element_types_x petf1
    ,apps.pay_element_types_x petf2
    ,apps.pay_element_entries_f peef
    ,apps.pay_element_entries_f peef1
    ,apps.pay_element_entries_f peef2
    ,apps.pay_element_entry_values_x peev
    ,apps.pay_element_entry_values_x peev1
    ,apps.pay_element_entry_values_x peev2
    ,apps.pay_input_values_x pivf
    ,apps.pay_input_values_x pivf1
    ,apps.pay_input_values_x pivf2
    WHERE
    papf.person_id = paaf.person_id
    AND paaf.assignment_id = peef.assignment_id
    AND paaf.assignment_id = peef1.assignment_id
    AND paaf.business_group_id = papf.business_group_id
    --Transport Allowance
    AND peef.element_entry_id = peev.element_entry_id
    AND petf.element_Name = 'Transport Allowance'
    AND pivf.element_type_id =petf.element_type_id
    AND pivf.name = 'Allowance'
    AND peev.input_value_id= pivf.input_value_id
    --Project Allowance
    AND peef1.element_entry_id = peev1.element_entry_id
    AND petf1.element_Name = "Project Allowance'
    AND pivf1.element_type_id = petf1.element_type_id
    AND pivf1.name = 'Allowance'
    AND peev1.input_value_id = pivf1.input_value_id
    AND (SYSDATE BETWEEN peev.effective_start_date AND peev.effective_end_date)
    AND (SYSDATE BETWEEN peev1.effective_start_date AND peev1.effective_end_date)
    AND (SYSDATE BETWEEN papf.effective_start_date AND papf.effective_end_date)
    ORDER BY papf.employee_number
    Thanks in advance.

    I am using sames tables with alias to retrieve the columns values from the same table.
    Here is my query.
    SELECT DISTINCT papf.employee_number
    , peev.screen_entry_value Transport_Allowance
    ,peev1.screen_entry_value Project_Allowance
    FROM apps.per_all_people_f papf
    ,apps.per_all_assignments_f paaf
    ,apps.pay_element_types_x petf
    ,apps.pay_element_types_x petf1
    ,apps.pay_element_entries_f peef
    ,apps.pay_element_entries_f peef1
    ,apps.pay_element_entry_values_x peev
    ,apps.pay_element_entry_values_x peev1
    ,apps.pay_input_values_x pivf
    ,apps.pay_input_values_x pivf1
    WHERE
    papf.person_id = paaf.person_id
    AND paaf.assignment_id = peef.assignment_id
    AND paaf.assignment_id = peef1.assignment_id
    AND paaf.business_group_id = papf.business_group_id
    --Transport Allowance
    AND peef.element_entry_id = peev.element_entry_id
    AND petf.element_Name = 'Transport Allowance'
    AND pivf.element_type_id =petf.element_type_id
    AND pivf.name = 'Allowance'
    AND peev.input_value_id= pivf.input_value_id
    --Project Allowance
    AND peef1.element_entry_id = peev1.element_entry_id
    AND petf1.element_Name = "Project Allowance'
    AND pivf1.element_type_id = petf1.element_type_id
    AND pivf1.name = 'Allowance'
    AND peev1.input_value_id = pivf1.input_value_id
    AND (SYSDATE BETWEEN peev.effective_start_date AND peev.effective_end_date)
    AND (SYSDATE BETWEEN peev1.effective_start_date AND peev1.effective_end_date)
    AND (SYSDATE BETWEEN papf.effective_start_date AND papf.effective_end_date)
    ORDER BY papf.employee_number
    Thanks in advance.

  • Tricky Situation with Disco columns!!

    The problem is something like this..
    I have a discoverer crosstab worksheet with a column axis called "Expenditure Category" which lists the expenditures (data point) against a list of employees (row axis). The expenditure categories that are present in the databse are, say, "ABC","DEF","XYZ".
    Only ABC and DEF are the ones that need to be displayed under expenditure categories because their costs are in currency (INR). The costs for the expenditure type XYZ are in terms of HOURS and it needs to be displayed as a separate column (some calculation) alongside the employee names.
    As of now, if i filter out the rows with expenditure category as "XYZ".. all those rows are lost and I cannot create any sort of calculation on them. On the other hand, if i include all those rows, then I get a column called "XYZ" under expenditure categories heading which I dont want.
    Any suggestions ?

    So are you saying that you want the XYZ to be an attribute of the Employee (thus in the left side drill) and not a fact (thus not in a cell) ?? And so it does not vary based on the cross-tab column, like the cost data does??
    If so, then you want to create a folder that joins the Employee to the hours info calculation (choice of a folder based on database view, SQL folder, complex folder). Then you can use this Employee+Hours folder as your base instead of the standard Employees, and join that to the costs info and do your crosstab as you were.

  • Foreign Key join between two columns in a dimension to one column in Fact

    Hi,
    I have a requirement to join two columns in a Dimension to the same column in the fact.
    My reports contains columns from this dimension and will need to use both the joins to get the correct values. So I am not sure if I create an alias to join the second column, if that will be output incorrect values.
    How can we achieve this so that I can still use columns from the dimension and still run both the joins in my SQL eventually.
    Dimension
    Column 1
    Column2
    Fact
    Column 3
    Need to map Column1--->Column 3 and Column2 -----> Column 3
    Thanks

    I put it in Dimension and dimension extension scenario with a fact
    The possible scenarios are:
    1) Column1--->Column 3 and Column2 -----> Column 3
    Both Column1 and Column2 have their own logical tables in BMM
    2)
    Column1--->Column 3
    Column1--->Column2
    In this case You have Logical table with 2 different sources Column1 and Column2 using column mapping.
    you can go for multiple logical sources in this case, based on column selection tables in the join condition

  • Best way to JOIN with OWB 10.2

    Hi Gurus,
    im a newbie in working with OWB and i also apologize for my englisch. I have the following Issue. Im using Oracle warehousebuilder and i want to load data in a new Table as Table3 from two distinct source table Table1 and Table2.
    It should look like this: Table3.col1 = Table1.col2 ; Table3.col2 = Table1.col3; Table3.col3 = Table2.colb.
    I mean it is a kind of JOIN but the column from Table3 have to be just the same as the column from Table1 and Table2 and no other combination.
    Table1 : col1 | col2 | col3
    Table2: cola | colb | colc
    Table3: Table1.col2 | Table1.col3 | Table2.colb
    Can someone help me?
    Thx

    Vinzsanity,
    The problem is that you are trying to model a query that requires something more than a simple join as you seem to hope..
    Joining based on simple table row order is not something relational databases are really designed to do well. They join on values. For example, if you simply try to write basic SQL to make your join you discover the problem:
    select t1.col1, t2.colb
    from   table1 a,
             table2  b
    where a.rownum = b.rownum ;What you get is an ORA-01747 error as the rownum psuedocolumn is not valid in this context. But if you don't find a way to join on roworder you get the crossproduct - which is NOT what you want.
    The simplest pure SQL join to get your results as described in your sample data is:
    select a.col1, b.cola
    from   (select rownum rnum, s.* from table1 s) a,
             (select rownum rnum, t.* from table2 t) b
    where a.rnum(+) = b.rnum;but this only implies a possible one-way outer join to meet your described data sample. If you want a full outer join to handle the possibilities where either table could have more or less rows than the other, then
    select a.col1, b.cola
    from   ((select rownum rnum, s.* from table1 s) a
             full outer join
           (select rownum rnum, t.* from table2 t) b
           on (a.rnum = b.rnum))Now, clearly this is NOT going to me modelled as just a simple join in OWB. First, you need to find a way to add the rownum pseudocolumn to both table result sets in order to be able to join on them. For example, you could use an expression object for each table, dump all of the fields straight from the expression input to the expression output, and then add a rownum column to the output as well. Then join the two with a joiner defined as full outer join on the two rownum fields and map the required columns to the target table.
    Or, you could create a view:
    Create or replace view table1_And_2_outer_join as
    select a.*, b.*
    from   ((select rownum rnum1, s.* from table1 s) a
             full outer join
           (select rownum rnum2, t.* from table2 t) b
           on (a.rnum = b.rnum))And use that view as the source object in your mapping.
    Or create two views:
    Create or replace view table1_with_rownum as
    select rownum rnum1, s.* from table1;
    Create or replace view table2_with_rownum as
    select rownum rnum2, t.* from table2 tAnd then use the two views as your sources and join them together using the joiner object defined as outer join on the rownumber values.
    Any of those three options will get you what you seem to want.
    Cheers,
    Mike

  • All Joins with Example

    Hi Experts,
    Pls let me know what are all joins available in ABAP??
    One example program for each for better understanding...
    Any useful inputs on this will be highly rewarded.
    Thanks in advance
    Rgds ~ Lakshmiraj

    Hi,
    Joins are used to fetch data fast from Database tables:
    Tables are joined with the proper key fields to fetch the data properly.
    If there are no proper key fields between tables don't use Joins;
    Important thing is that don't USE JOINS FOR CLUSTER tableslike BSEG and KONV.
    Only use for Transparenmt tables.
    You can also use joins for the database VIews to fetch the data.
    JOINS
    ... FROM tabref1 [INNER] JOIN tabref2 ON cond
    Effect
    The data is to be selected from transparent database tables and/or views determined by tabref1 and tabref2. tabref1 and tabref2 each have the same form as in variant 1 or are themselves Join expressions. The keyword INNER does not have to be specified. The database tables or views determined by tabref1 and tabref2 must be recognized by the ABAP Dictionary.
    In a relational data structure, it is quite normal for data that belongs together to be split up across several tables to help the process of standardization (see relational databases). To regroup this information into a database query, you can link tables using the join command. This formulates conditions for the columns in the tables involved. The inner join contains all combinations of lines from the database table determined by tabref1 with lines from the table determined by tabref2, whose values together meet the logical condition (join condition) specified using ON>cond.
    Inner join between table 1 and table 2, where column D in both tables in the join condition is set the same:
    Table 1 Table 2
    A
    B
    C
    D
    D
    E
    F
    G
    H
    a1
    b1
    c1
    1
    1
    e1
    f1
    g1
    h1
    a2
    b2
    c2
    1
    3
    e2
    f2
    g2
    h2
    a3
    b3
    c3
    2
    4
    e3
    f3
    g3
    h3
    a4
    b4
    c4
    3
    |--|||--|
    Inner Join
    A
    B
    C
    D
    D
    E
    F
    G
    H
    a1
    b1
    c1
    1
    1
    e1
    f1
    g1
    h1
    a2
    b2
    c2
    1
    1
    e1
    f1
    g1
    h1
    a4
    b4
    c4
    3
    3
    e2
    f2
    g2
    h2
    |--||||||||--|
    Example
    Output a list of all flights from Frankfurt to New York between September 10th and 20th, 2001 that are not sold out:
    DATA: DATE LIKE SFLIGHT-FLDATE,
    CARRID LIKE SFLIGHT-CARRID,
    CONNID LIKE SFLIGHT-CONNID.
    SELECT FCARRID FCONNID F~FLDATE
    INTO (CARRID, CONNID, DATE)
    FROM SFLIGHT AS F INNER JOIN SPFLI AS P
    ON FCARRID = PCARRID AND
    FCONNID = PCONNID
    WHERE P~CITYFROM = 'FRANKFURT'
    AND P~CITYTO = 'NEW YORK'
    AND F~FLDATE BETWEEN '20010910' AND '20010920'
    AND FSEATSOCC < FSEATSMAX.
    WRITE: / DATE, CARRID, CONNID.
    ENDSELECT.
    If there are columns with the same name in both tables, you must distinguish between them by prefixing the field descriptor with the table name or a table alias.
    Note
    In order to determine the result of a SELECT command where the FROM clause contains a join, the database system first creates a temporary table containing the lines that meet the ON condition. The WHERE condition is then applied to the temporary table. It does not matter in an inner join whether the condition is in the ON or WHEREclause. The following example returns the same solution as the previous one.
    Example
    Output of a list of all flights from Frankfurt to New York between September 10th and 20th, 2001 that are not sold out:
    DATA: DATE LIKE SFLIGHT-FLDATE,
    CARRID LIKE SFLIGHT-CARRID,
    CONNID LIKE SFLIGHT-CONNID.
    SELECT FCARRID FCONNID F~FLDATE
    INTO (CARRID, CONNID, DATE)
    FROM SFLIGHT AS F INNER JOIN SPFLI AS P
    ON FCARRID = PCARRID
    WHERE FCONNID = PCONNID
    AND P~CITYFROM = 'FRANKFURT'
    AND P~CITYTO = 'NEW YORK'
    AND F~FLDATE BETWEEN '20010910' AND '20010920'
    AND FSEATSOCC < FSEATSMAX.
    WRITE: / DATE, CARRID, CONNID.
    ENDSELECT.
    Note
    Since not all of the database systems supported by SAP use the standard syntax for ON conditions, the syntax has been restricted. It only allows those joins that produce the same results on all of the supported database systems:
    Only a table or view may appear to the right of the JOIN operator, not another join expression.
    Only AND is possible in the ON condition as a logical operator.
    Each comparison in the ON condition must contain a field from the right-hand table.
    If an outer join occurs in the FROM clause, all the ON conditions must contain at least one "real" JOIN condition (a condition that contains a field from tabref1 amd a field from tabref2.
    Note
    In some cases, '*' may be specified in the SELECT clause, and an internal table or work area is entered into the INTO clause (instead of a list of fields). If so, the fields are written to the target area from left to right in the order in which the tables appear in the FROM clause, according to the structure of each table work area. There can then be gaps between table work areas if you use an Alignment Request. For this reason, you should define the target work area with reference to the types of the database tables, not simply by counting the total number of fields. For an example, see below:
    Variant 3
    ... FROM tabref1 LEFT [OUTER] JOIN tabref2 ON cond
    Effect
    Selects the data from the transparent database tables and/or views specified in tabref1 and tabref2. tabref1 und tabref2 both have either the same form as in variant 1 or are themselves join expressions. The keyword OUTER can be omitted. The database tables or views specified in tabref1 and tabref2 must be recognized by the ABAP-Dictionary.
    In order to determine the result of a SELECT command where the FROM clause contains a left outer join, the database system creates a temporary table containing the lines that meet the ON condition. The remaining fields from the left-hand table (tabref1) are then added to this table, and their corresponding fields from the right-hand table are filled with ZERO values. The system then applies the WHERE condition to the table.
    Left outer join between table 1 and table 2 where column D in both tables set the join condition:
    Table 1 Table 2
    A
    B
    C
    D
    D
    E
    F
    G
    H
    a1
    b1
    c1
    1
    1
    e1
    f1
    g1
    h1
    a2
    b2
    c2
    1
    3
    e2
    f2
    g2
    h2
    a3
    b3
    c3
    2
    4
    e3
    f3
    g3
    h3
    a4
    b4
    c4
    3
    |--|||--|
    Left Outer Join
    A
    B
    C
    D
    D
    E
    F
    G
    H
    a1
    b1
    c1
    1
    1
    e1
    f1
    g1
    h1
    a2
    b2
    c2
    1
    1
    e1
    f1
    g1
    h1
    a3
    b3
    c3
    2
    NULL
    NULL
    NULL
    NULL
    NULL
    a4
    b4
    c4
    3
    3
    e2
    f2
    g2
    h2
    |--||||||||--|
    Example
    Output a list of all custimers with their bookings for October 15th, 2001:
    DATA: CUSTOMER TYPE SCUSTOM,
    BOOKING TYPE SBOOK.
    SELECT SCUSTOMNAME SCUSTOMPOSTCODE SCUSTOM~CITY
    SBOOKFLDATE SBOOKCARRID SBOOKCONNID SBOOKBOOKID
    INTO (CUSTOMER-NAME, CUSTOMER-POSTCODE, CUSTOMER-CITY,
    BOOKING-FLDATE, BOOKING-CARRID, BOOKING-CONNID,
    BOOKING-BOOKID)
    FROM SCUSTOM LEFT OUTER JOIN SBOOK
    ON SCUSTOMID = SBOOKCUSTOMID AND
    SBOOK~FLDATE = '20011015'
    ORDER BY SCUSTOMNAME SBOOKFLDATE.
    WRITE: / CUSTOMER-NAME, CUSTOMER-POSTCODE, CUSTOMER-CITY,
    BOOKING-FLDATE, BOOKING-CARRID, BOOKING-CONNID,
    BOOKING-BOOKID.
    ENDSELECT.
    If there are columns with the same name in both tables, you must distinguish between them by prefixing the field descriptor with the table name or using an alias.
    Note
    For the resulting set of a SELECT command with a left outer join in the FROM clause, it is generally of crucial importance whether a logical condition is in the ON or WHERE condition. Since not all of the database systems supported by SAP themselves support the standard syntax and semantics of the left outer join, the syntax has been restricted to those cases that return the same solution in all database systems:
    Only a table or view may come after the JOIN operator, not another join statement.
    The only logical operator allowed in the ON condition is AND.
    Each comparison in the ON condition must contain a field from the right-hand table.
    Comparisons in the WHERE condition must not contain a field from the right-hand table.
    The ON condition must contain at least one "real" JOIN condition (a condition in which a field from tabref1 as well as from tabref2 occurs).
    Note
    In some cases, '*' may be specivied as the field list in the SELECT clause, and an internal table or work area is entered in the INTO clause (instead of a list of fields). If so, the fields are written to the target area from left to right in the order in which the tables appear in the llen in der FROM clause, according to the structure of each table work area. There can be gaps between the table work areas if you use an Alignment Request. For this reason, you should define the target work area with reference to the types of the database tables, as in the following example (not simply by counting the total number of fields).
    Example
    Example of a JOIN with more than two tables: Select all flights from Frankfurt to New York between September 10th and 20th, 2001 where there are available places, and display the name of the airline.
    DATA: BEGIN OF WA,
    FLIGHT TYPE SFLIGHT,
    PFLI TYPE SPFLI,
    CARR TYPE SCARR,
    END OF WA.
    SELECT * INTO WA
    FROM ( SFLIGHT AS F INNER JOIN SPFLI AS P
    ON FCARRID = PCARRID AND
    FCONNID = PCONNID )
    INNER JOIN SCARR AS C
    ON FCARRID = CCARRID
    WHERE P~CITYFROM = 'FRANKFURT'
    AND P~CITYTO = 'NEW YORK'
    AND F~FLDATE BETWEEN '20010910' AND '20010920'
    AND FSEATSOCC < FSEATSMAX.
    WRITE: / WA-CARR-CARRNAME, WA-FLIGHT-FLDATE, WA-FLIGHT-CARRID,
    WA-FLIGHT-CONNID.
    ENDSELECT.
    Syntax
    ... [(] {dbtab_left [AS tabalias_left]} | join
    {[INNER] JOIN}|{LEFT [OUTER] JOIN}
    {dbtab_right [AS tabalias_right] ON join_cond} [)] ... .
    Effect
    The join syntax represents a recursively nestable join expression. A join expression consists of a left-hand and a right- hand side, which are joined either by means of [INNER] JOIN or LEFT [OUTER] JOIN . Depending on the type of join, a join expression can be either an inner ( INNER) or an outer (LEFT OUTER) join. Every join expression can be enclosed in round brackets. If a join expression is used, the SELECT command circumvents SAP buffering.
    On the left-hand side, either a single database table, a view dbtab_left, or a join expression join can be specified. On the right-hand side, a single database table or a view dbtab_right as well as join conditions join_cond can be specified after ON. In this way, a maximum of 24 join expressions that join 25 database tables or views with each other can be specified after FROM.
    AS can be used to specify an alternative table name tabalias for each of the specified database table names or for every view. A database table or a view can occur multiple times within a join expression and, in this case, have various alternative names.
    The syntax of the join conditions join_cond is the same as that of the sql_cond conditions after the addition WHERE, with the following differences:
    At least one comparison must be specified after ON.
    Individual comparisons may be joined using AND only.
    All comparisons must contain a column in the database table or the view dbtab_right on the right-hand side as an operand.
    The following language elements may not be used: BETWEEN, LIKE, IN.
    No sub-queries may be used.
    For outer joins, only equality comparisons (=, EQ) are possible.
    If an outer join occurs after FROM, the join condition of every join expression must contain at least one comparison between columns on the left-hand and the right-hand side.
    In outer joins, all comparisons that contain columns as operands in the database table or the view dbtab_right on the right-hand side must be specified in the corresponding join condition. In the WHERE condition of the same SELECT command, these columns are not allowed as operands.
    Resulting set for inner join
    The inner join joins the columns of every selected line on the left- hand side with the columns of all lines on the right-hand side that jointly fulfil the join_cond condition. A line in the resulting set is created for every such line on the right-hand side. The content of the column on the left-hand side may be duplicated in this case. If none of the lines on the right-hand side fulfils the join_cond condition, no line is created in the resulting set.
    Resulting set for outer join
    The outer join basically creates the same resulting set as the inner join, with the difference that at least one line is created in the resulting set for every selected line on the left-hand side, even if no line on the right-hand side fulfils the join_cond condition. The columns on the right-hand side that do not fulfil the join_cond condition are filled with null values.
    Example
    Join the columns carrname, connid, fldate of the database tables scarr, spfli and sflight by means of two inner joins. A list is created of the flights from p_cityfr to p_cityto. Alternative names are used for every table.
    PARAMETERS: p_cityfr TYPE spfli-cityfrom,
    p_cityto TYPE spfli-cityto.
    DATA: BEGIN OF wa,
    fldate TYPE sflight-fldate,
    carrname TYPE scarr-carrname,
    connid TYPE spfli-connid,
    END OF wa.
    DATA itab LIKE SORTED TABLE OF wa
    WITH UNIQUE KEY fldate carrname connid.
    SELECT ccarrname pconnid f~fldate
    INTO CORRESPONDING FIELDS OF TABLE itab
    FROM ( ( scarr AS c
    INNER JOIN spfli AS p ON pcarrid = ccarrid
    AND p~cityfrom = p_cityfr
    AND p~cityto = p_cityto )
    INNER JOIN sflight AS f ON fcarrid = pcarrid
    AND fconnid = pconnid ).
    LOOP AT itab INTO wa.
    WRITE: / wa-fldate, wa-carrname, wa-connid.
    ENDLOOP.
    Example
    Join the columns carrid, carrname and connid of the database tables scarr and spfli using an outer join. The column connid is set to the null value for all flights that do not fly from p_cityfr. This null value is then converted to the appropriate initial value when it is transferred to the assigned data object. The LOOP returns all airlines that do not fly from p_cityfr.
    PARAMETERS p_cityfr TYPE spfli-cityfrom.
    DATA: BEGIN OF wa,
    carrid TYPE scarr-carrid,
    carrname TYPE scarr-carrname,
    connid TYPE spfli-connid,
    END OF wa,
    itab LIKE SORTED TABLE OF wa
    WITH NON-UNIQUE KEY carrid.
    SELECT scarrid scarrname p~connid
    INTO CORRESPONDING FIELDS OF TABLE itab
    FROM scarr AS s
    LEFT OUTER JOIN spfli AS p ON scarrid = pcarrid
    AND p~cityfrom = p_cityfr.
    LOOP AT itab INTO wa.
    IF wa-connid = '0000'.
    WRITE: / wa-carrid, wa-carrname.
    ENDIF.
    ENDLOOP.
    Cheers,
    vasavi.
    kindly reward if helpful.

Maybe you are looking for

  • [Reader]Zone grise sur les pdf

    Bonjour, J'ai un problème à l'ouverture de mes fichiers pdf, j'ai  un gros rectangle/carré gris  sur certaine page du pdf empechant sa lecture. L'option "Show Large image" est coché. A priori le problème survient quand un fichier pdf est déjà ouvert.

  • Port Mapping control page missing under firmware 7.3.2

    The reference to "port mapping" on page 55 of the manual "Designing AirPort Networks Using AirPort Utility Mac OS X v10.5 + Windows" is now missing following upgrading my Time Capsule to firmware 7.3.2 - see: http://manuals.info.apple.com/en/Designin

  • Would a leather magnetic flip case damage my Iphone?

    would a leather magnetic flip case damage my Iphone???

  • Runtime Compatibility Mode property

    Hello! I have a problem after the migration from Forms6i to Forms9i because there is no Runtime Compatibility Mode property anymore. In the previous version I used 4.5 value for that field because that was the only way to realise a sequance of trigge

  • Dead 5800 xm

    i had get 5800 xm mobile ... it was fine for 2 month then it just get outof charge ... then dead ..... no response .... didnt turn on again ... i tried to put anthor software ... nothing haben ...sorry its only vibrate when i try to open only ... oh