SQL Server:在源表上使用联接合并无法绑定

时间:2019-03-10 08:42:30

标签: sql sql-server join sql-merge

我正在编写SQL Server Merge语句,但是似乎语法不正确。有人可以看看我要去哪里了吗?

您能给予的任何帮助都是最感激的。

我有两个要合并的表(w_materialmarketprices2d_component)。我的源(d_component)表要求我联接一个税表(d_tax)。

一切正常,除了当我尝试将其他税表添加到我的联接中时。我需要税表的原因是,它包含d_component表中没有的税率(尽管我有相应的税码)。

我在w_materialmarketprices2d_component之间的比较标准包括计算中的税率。

这是我的代码:

MERGE [DWH].[dbo].[w_materialmarketprices2] AS A
USING
    (SELECT 
         [comp_code], [comp_desc], [comp_o_un], [comp_type],
         [comp_ccy], [comp_tx], [comp_net_price], [comp_per],
         [comp_doc_date], [comp_last_update], [comp_latest],
         D.[tax_rate] AS TaxRate
     FROM 
         [DWH].[dbo].[d_component]) AS B
     INNER JOIN 
         [DWH].[dbo].[d_tax] AS D ON D.[tax_code] = B.[comp_tx]
ON
  A.[mp_comp_code] = B.[comp_code] AND A.[mp_valid_date] = B.[comp_doc_date] AND B.[comp_net_price]>0 AND A.[mp_price_inc_vat] = ROUND(((B.[comp_net_price]/B.[comp_per])*(1+TaxRate),3) AND A.[mp_budget_actual] = 'PO Actual' AND B.[comp_type] ='P100' AND (left(B.[comp_code],1)='S' OR left(B.[comp_code],1)='R')

WHEN NOT MATCHED BY TARGET
    THEN 
        INSERT ([mp_budget_actual], [mp_comp_code], [mp_comp_desc], [mp_unit], [mp_unit_qty], [mp_qualified_supplier], [mp_ccy], [mp_price_inc_vat], [mp_valid_date], [mp_last_update], [mp_latest])
        VALUES ('PO Actual', B.[comp_code], B.[comp_desc], B.[comp_o_un], 1, 'Y', B.[comp_ccy], ROUND(((B.[comp_net_price]/B.[comp_per])*(1+TaxRate),3), B.[comp_doc_date], B.[comp_last_update], B.[comp_latest])
;

我得到的错误是:

  

消息4145,第15级,状态1,第20行
  在需要条件的上下文中在“,”附近指定的非布尔类型的表达式。

     

第15层状态1的23行的消息102
  'B'附近的语法不正确。

,D.[tax_rate] AS TaxRate以红色下划线显示,因此我认为问题与这有关。我也收到消息

  

无法绑定多部分标识符“ D.tax_rate”

非常感谢您的帮助。香港人。

1 个答案:

答案 0 :(得分:0)

没有理由在USING子句中使用子查询,即:不要在其中放置SELECT

MERGE [DWH].[dbo].[w_materialmarketprices2] AS A
USING
    [DWH].[dbo].[d_component] AS B
    INNER JOIN [DWH].[dbo].[d_tax] AS D ON D.[tax_code] = B.[comp_tx]
ON
  A.[mp_comp_code] = B.[comp_code] .......