【问题标题】:Returning rows that have a particular string where column is null, but also including lines where column is not null?返回具有特定字符串且列为空的行,但还包括列不为空的行?
【发布时间】:2021-10-31 09:10:06
【问题描述】:

我正在尝试从发货通知中提取信息,这些信息会在订单发货时自动加载到我们的系统中。我希望能拿到BILL_OF_LADING (BOL) 和发货数量(SHQ 和AUDIT_TRAIL_VERBAGE 中的号码)。当行中有提单时,系统会自动填充到提单列中。

PO_NUMBER AUDIT_TRAIL_VERBAGE BILL_OF_LADING
1234567 BOL 1234567890AB/CAR FEDEX/ 1234567890AB
1234567 SHQ 00007/UNT EA/

我认为这个逻辑需要在我的WHERE 语句中(可能是CASE 语句?)但如果 BOL 列为空,我无法弄清楚如何让 SQL 返回发货的数量。如果我能抓住 SHQ 后面的数字(它总是 5),那就太好了。下面是我尝试的最后一件事,但 OR 语句的行为不像我想象的那样,并接管了整个 WHERE 语句。

SELECT  PO_NUMBER,
        AUDIT_TRAIL_VERBAGE,
        BILL_OF_LADING

FROM MY.TABLE

WHERE 
       PO_NUMBER IN '1234567'
   AND BILL_OF_LADING IS NOT NULL
   OR AUDIT_TRAIL_VERBAGE LIKE 'SHQ%'

我还在学习,所以任何帮助或指导将不胜感激!

谢谢

【问题讨论】:

    标签: sql teradata-sql-assistant


    【解决方案1】:

    由于您标记了帖子 terradata,我假设这是您正在使用的 sql 的风格。 substring 函数是特定于风味的。您的 WHERE 子句几乎是正确的,您所需要的只是括号。

    SELECT PO_NUMBER,
        BILL_OF_LADING,
        AUDIT_TRAIL_VERBAGE,
        CASE WHEN AUDIT_TRAIL_VERBAGE LIKE 'SHQ%'
             THEN SUBSTRING(AUDIT_TRAIL_VERBAGE 5 FOR 5)
             ELSE NULL
        END AS SHIPPED_QTY
    
    FROM MY.TABLE 
    
    WHERE 
       PO_NUMBER IN '1234567'
       AND (BILL_OF_LADING IS NOT NULL
       OR AUDIT_TRAIL_VERBAGE LIKE 'SHQ%')
    

    现在,如果您想在一行中获取一份 PO 的信息,您可以这样做:

    SELECT SHQ.PO_NUMBER,
        BOL.BILL_OF_LADING
        SUBSTRING(SHQ.AUDIT_TRAIL_VERBAGE 5 FOR 5) AS SHIPPED_QTY
    
    FROM MY.TABLE AS SHQ
    LEFT JOIN MY.TABLE AS BOL ON SHQ.PO_NUMBER=BOL.PO_NUMBER 
                              AND BOL.BILL_OF_LADING IS NOT NULL
                              AND SHQ.AUDIT_TRAIL_VERBAGE LIKE 'SHQ%'
    WHERE 
       PO_NUMBER IN '1234567'
      
    

    【讨论】:

    • Teradata 语法支持SUBSTR(SHQ.AUDIT_TRAIL_VERBAGE,5,5)SUBSTRING(SHQ.AUDIT_TRAIL_VERBAGE FROM 5 FOR 5),但不支持带有 FOR 的 SUBSTR。
    • @Fred。固定的。我在文档中看到过,我不知道为什么我一开始没有那样写。
    • @BrianZ 第一个代码有效,但如果它可以像您的第二个代码一样在一行中,我会很棒。它给了我“SQL 命令未正确结束”错误,它似乎不像“AS SHQ”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    相关资源
    最近更新 更多