Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 262
  • Last Modified:

Oracle - Query to filter issue

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
Wilder1626
Asked:
Wilder1626
  • 4
  • 2
1 Solution
 
sdstuberCommented:
you don't have a join condition between your two tables.

you are joining every location to every vendor
0
 
sdstuberCommented:
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
 
Wilder1626Author Commented:
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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
Wilder1626Author Commented:
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
 
Wilder1626Author Commented:
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
 
Wilder1626Author Commented:
Thank you so much for your help.

All good now
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now