Solved

Oracle - Query to filter issue

Posted on 2013-01-12
6
253 Views
Last Modified: 2013-01-12
Hello all

I have this query bellow that validate if LOCATION.SCNALIAS exist in FP_VENDOR_INFO.VENDOR_NBR or not. It is exist, it say YES and if not, it say NO

The thing is that i get the result twice for every LOCATION.SCNALIAS. One at NO and one at YES.

It can only be YES or NO, it exist or not.

How can i fix this?

Thanks again.

SELECT distinct LOCATION.ID,
    LOCATION.SCNALIAS,
    CASE 
        WHEN LOCATION.SCNALIAS = FP_VENDOR_INFO.VENDOR_NBR
            THEN 'YES'
        ELSE 'NO'
        END SCNALIAS_MATCH
FROM TMMGR.LOCATION,
    TMMGR.FP_VENDOR_INFO
WHERE (
        SUBSTR(LOCATION.ID, 6, 1) BETWEEN 'A'
            AND ('Z')
        AND SUBSTR(LOCATION.ID, 3, 1) BETWEEN '0'
            AND ('9')
        )
    ORDER BY LOCATION.SCNALIAS ASC;

Open in new window


query issuequery-issue.jpg
0
Comment
Question by:Wilder1626
  • 4
  • 2
6 Comments
 
LVL 73

Expert Comment

by:sdstuber
Comment Utility
you don't have a join condition between your two tables.

you are joining every location to every vendor
0
 
LVL 73

Accepted Solution

by:
sdstuber earned 500 total points
Comment Utility
try this...


SELECT DISTINCT location.id,
                location.scnalias,
                NVL(
                    (SELECT 'YES'
                       FROM tmmgr.fp_vendor_info
                      WHERE location.scnalias = fp_vendor_info.vendor_nbr AND ROWNUM = 1),
                    'NO'
                )
                    scnalias_match
  FROM tmmgr.location
 WHERE (SUBSTR(location.id, 6, 1) BETWEEN 'A' AND ('Z')
    AND SUBSTR(location.id, 3, 1) BETWEEN '0' AND ('9'))
ORDER BY location.scnalias ASC;
0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
Hi again

It looks like it work. i will just make sure i get all result.

If i want to add another NVL, i guess it would be the same process. But when i add it, on the new NVL, they all have result YES when some of them should be NO.

Do you see something wrong with this updated query?

SELECT DISTINCT LOCATION.ID,
    LOCATION.SCNALIAS,
            NVL((
                SELECT 'YES'
                FROM TMMGR.FP_VENDOR_INFO
                WHERE LOCATION.SCNALIAS = FP_VENDOR_INFO.VENDOR_NBR
                    AND ROWNUM = 1
                ), 'NO') SCNALIAS_MATCH,            
            NVL((
                SELECT 'YES'
                FROM TL_RATE TLR,
                    TL_RATE_DETAIL TRD,
                    LANE_RATE_NETWORK LRN
                WHERE TLR.CARRIER_ID = TRD.CARRIER_ID(+)
                    AND TLR.LANE_ID = TRD.LANE_ID(+)
                    AND TLR.TARIFF_CLASS_ID = TRD.TARIFF_CLASS_ID(+)
                    AND TLR.EFFECTIVE = TRD.EFFECTIVE(+)
                    AND TLR.LANE_ID = LRN.ID
                    AND TLR.CARRIER_ID = 'CUSTOMER'
                    AND LRN.FROM_KEY_NUM = 6
                    AND TLR.EXPIRATION > TO_DATE(TO_CHAR(SYSDATE, 'YYYYMMDD'), 'YYYYMMDD')
                    AND ROWNUM = 1
                ), 'NO') VENDOR_RATE_SET                
FROM TMMGR.LOCATION
WHERE (
        SUBSTR(LOCATION.ID, 6, 1) BETWEEN 'A'
            AND ('Z')
        AND SUBSTR(LOCATION.ID, 3, 1) BETWEEN '0'
            AND ('9')
        )
ORDER BY LOCATION.SCNALIAS ASC;

Open in new window

0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
I see that i was not linking the LOCATION.ID with LRN.FROM_LOW_KEY_VALUE.

The location ID could be set in LRN.FROM_LOW_KEY_VALUE or not.

But still i have all YES when some should be NO


SELECT DISTINCT LOCATION.ID,
    LOCATION.SCNALIAS,
            NVL((
                SELECT 'YES'
                FROM TMMGR.FP_VENDOR_INFO
                WHERE LOCATION.SCNALIAS = FP_VENDOR_INFO.VENDOR_NBR
                    AND ROWNUM = 1
                ), 'NO') SCNALIAS_MATCH,            
    NVL((
            SELECT 'YES'
            FROM TL_RATE TLR,
                TL_RATE_DETAIL TRD,
                LANE_RATE_NETWORK LRN,
                LOCATION 
            WHERE TLR.CARRIER_ID = TRD.CARRIER_ID(+)
                AND TLR.LANE_ID = TRD.LANE_ID(+)
                AND TLR.TARIFF_CLASS_ID = TRD.TARIFF_CLASS_ID(+)
                AND TLR.EFFECTIVE = TRD.EFFECTIVE(+)
                AND TLR.LANE_ID = LRN.ID
                AND TLR.CARRIER_ID = 'CUSTOMER'
                AND LRN.FROM_KEY_NUM = 6
                AND LOCATION.ID = LRN.FROM_LOW_KEY_VALUE
                AND TLR.EXPIRATION > TO_DATE(TO_CHAR(SYSDATE, 'YYYYMMDD'), 'YYYYMMDD')
                AND ROWNUM = 1
                ), 'NO') VENDOR_RATE_SET                
FROM TMMGR.LOCATION
WHERE (
        SUBSTR(LOCATION.ID, 6, 1) BETWEEN 'A'
            AND ('Z')
        AND SUBSTR(LOCATION.ID, 3, 1) BETWEEN '0'
            AND ('9')
        )
ORDER BY LOCATION.SCNALIAS ASC;

Open in new window

0
 
LVL 11

Author Comment

by:Wilder1626
Comment Utility
I think i have it now.

Let me do a last validation

SELECT DISTINCT LOCATION.ID,
    LOCATION.SCNALIAS,
    CASE 
        WHEN LOCATION.SCNALIAS IS NOT NULL
            THEN '-'
        ELSE 'NO'
        END SCNALIAS_SET,
            NVL((
                SELECT '-'
                FROM TMMGR.FP_VENDOR_INFO
                WHERE LOCATION.SCNALIAS = FP_VENDOR_INFO.VENDOR_NBR
                    AND ROWNUM = 1
                ), 'NO') SCNALIAS_MATCH,            
    NVL((
            SELECT '-'
            FROM TL_RATE TLR,
                TL_RATE_DETAIL TRD,
                LANE_RATE_NETWORK LRN
            WHERE TLR.CARRIER_ID = TRD.CARRIER_ID(+)
                AND TLR.LANE_ID = TRD.LANE_ID(+)
                AND TLR.TARIFF_CLASS_ID = TRD.TARIFF_CLASS_ID(+)
                AND TLR.EFFECTIVE = TRD.EFFECTIVE(+)
                AND TLR.LANE_ID = LRN.ID
                AND TLR.CARRIER_ID = 'CUSTOMER'
                AND LRN.FROM_KEY_NUM = 6
                AND LRN.FROM_LOW_KEY_VALUE (+) = LOCATION.ID
                AND TLR.EXPIRATION > TO_DATE(TO_CHAR(SYSDATE, 'YYYYMMDD'), 'YYYYMMDD')
                AND ROWNUM = 1
                ), 'NO') VENDOR_RATE_SET                
FROM TMMGR.LOCATION
WHERE (
        SUBSTR(LOCATION.ID, 6, 1) BETWEEN 'A'
            AND ('Z')
        AND SUBSTR(LOCATION.ID, 3, 1) BETWEEN '0'
            AND ('9')
        )
ORDER BY LOCATION.SCNALIAS ASC;

Open in new window

0
 
LVL 11

Author Closing Comment

by:Wilder1626
Comment Utility
Thank you so much for your help.

All good now
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Confronted with some SQL you don't know can be a daunting task. It can be even more daunting if that SQL carries some of the old secret codes used in the Ye Olde query syntax, such as: (+)     as used in Oracle;     *=     =*    as used in Sybase …
Using SQL Scripts we can save all the SQL queries as files that we use very frequently on our database later point of time. This is one of the feature present under SQL Workshop in Oracle Application Express.
Via a live example show how to connect to RMAN, make basic configuration settings changes and then take a backup of a demo database
Video by: Steve
Using examples as well as descriptions, step through each of the common simple join types, explaining differences in syntax, differences in expected outputs and showing how the queries run along with the actual outputs based upon a simple set of dem…

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now