Я пишу оператор SQL Server Merge
, но не могу получить правильный синтаксис. Кто-нибудь, пожалуйста, посмотрите, где я иду не так?
Любая помощь, которую вы можете оказать, очень ценится.
У меня есть две таблицы, которые я хотел бы объединить (w_materialmarketprices2
и d_component
). Моя исходная таблица (d_component
) требует, чтобы я присоединился к таблице налогов (d_tax
).
Все работает нормально, за исключением случаев, когда я пытаюсь добавить таблицу дополнительных налогов в свое объединение. Причина, по которой мне нужна таблица налогов, заключается в том, что она содержит налоговую ставку, которой у меня нет в моей таблице d_component
(хотя у меня есть соответствующий налоговый кодекс).
Мои критерии сравнения w_materialmarketprices2
и d_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
Выражение не булева типа, указанное в контексте, где ожидается условие, рядом с ','.
Сообщение 102, Уровень 15, Состояние 1, Строка 23
Неверный синтаксис рядом с 'B'.
,D.[tax_rate] AS TaxRate
отображается подчеркнутым красным цветом, поэтому я считаю, что проблема как-то связана с этим. Я также получаю сообщение
Не удалось связать многоэлементный идентификатор "D.tax_rate"
Спасибо за вашу помощь заранее. Honkonger.