【问题标题】:Comparing Query Result With Table and Retrieve Specific Field将查询结果与表进行比较并检索特定字段
【发布时间】:2018-11-04 16:40:55
【问题描述】:

我的查询

SELECT
    stoMast.sStockistCode,
    stoMast.sStateName,
    stoMast.sDivision,
    stateMap.sRMCode
FROM
    tblRSM_State_Mapping stateMap
INNER JOIN
    tblStockistMaster stoMast ON
    stateMap.sStateName = stoMast.sStateName
WHERE 
    stateMap.sRMCode = 'MCNE04001' 
    and 
    stoMast.sDivision = 'CIDIS'

except

select 
    sStockistCode,
    sStateName,
    sDivision,
    sRMCode
From
    tblEntry

我又想比较一下查询结果列

  • sStockistCode
  • sStateName
  • sDivision

tblStockistMaster 具有相同的字段

  • sStockistCode
  • sStateName
  • sDivision 并检索 STOCKIST NAME。

不知道如何将上面的查询结果与表格进行比较。

【问题讨论】:

    标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2012


    【解决方案1】:
    -- I retrieve the stockist Name
    SELECT
        stoMast.sStockistName,
    FROM
        tblRSM_State_Mapping stateMap
    INNER JOIN
        tblStockistMaster stoMast
            ON stateMap.sStateName = stoMast.sStateName
    -- I'm joining table entry If I can match
    LEFT JOIN
        tblEntry tbl
            on tbl.sStockistCode = stoMast.sStockistName
            AND tbl.sStateName = stoMast.sStateName
            AND tbl.sDivision = stoMast.sDivision
            AND tbl.sRMCode = stateMap.sRMCode
    WHERE 
        stateMap.sRMCode = 'MCNE04001' 
        and stoMast.sDivision = 'CIDIS'
    -- And The the exept thing, I don't want that got a match with  the tableentry
        AND COALESCE(tbl.sStockistCode, tbl.sStateName, tbl.sDivision, tbl.sRMCode) is null
    

    我希望这是您想要得到的。以另一种方式,请帮助我们了解您来自哪里(表格和可以包含哪些数据的想法)以及您想要的结果。将更容易创建查询。

    【讨论】:

    • 我测试了它并没有得到想要的结果。我知道根据给定的 sql 代码很难理解要求。但它是我用有限的 sql 知识编写的 3 个表匹配查询的组合。我相信你会简化它,但我需要正确解释它。如果您有时间,请通知我,以便我可以用详细信息更新帖子。
    【解决方案2】:

    也许您可以使用以下与CTE 表达式一起使用的 SQL 代码

    ;with cte as (
        SELECT
            stoMast.sStockistCode,
            stoMast.sStateName,
            stoMast.sDivision,
            stateMap.sRMCode
        FROM
            tblRSM_State_Mapping stateMap
        INNER JOIN
            tblStockistMaster stoMast ON
            stateMap.sStateName = stoMast.sStateName
        WHERE 
            stateMap.sRMCode = 'MCNE04001' 
            and 
            stoMast.sDivision = 'CIDIS'
    
        except
    
        select 
            sStockistCode,
            sStateName,
            sDivision,
            sRMCode
        From
            tblEntry
    )
    select
    cte.*,
    sm.sStockistName
    from cte
    left join tblStockistMaster as sm
        on sm.sStockistCode  = cte.sStockistCode  and
           sm.sStateName  = cte.sStateName and
           sm.sDivision = cte.sDivision 
    

    【讨论】:

    • 谢谢,这很好用。您能告诉我如何将选定的列作为输出吗?目前它产生 4 列。我只想从中获取 sStockistCode 和 sStateName。
    • 查询的 SELECT 列表中有 cte.* 和 sm.sStockistName 列。代替 CTE.*,您可以识别每一列,如 cte.sStockistCode、cte.sStateName 等。
    • 知道了!非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    相关资源
    最近更新 更多