我尝试根据另一个表中存在的值加入2个表,特别是在字段为空的情况下。
根据该字段是否为空,我想以不同的方式执行LEFT JOIN。
示例:
LEFT JOIN (SELECT report_transaction_id, line_number, sale_staff_id, item_type, article_id, sale_count, return_count, line_price_inc_vat, merchandise_category
FROM [CRM].[TransactionItems]) ti
ON th.report_transaction_id = ti.report_transaction_id
CASE ti.article_id WHEN IS NULL THEN
LEFT JOIN (SELECT TOP 1 article_id, merchandise_category, long_desc, division_code, division_desc, group_code, group_desc
FROM [CRM].[Products]) p
ON ti.MERCHANDISE_CATEGORY = p.MERCHANDISE_CATEGORY
ELSE
LEFT JOIN (SELECT article_id, merchandise_category, long_desc, division_code, division_desc, group_code, group_desc
FROM [CRM].[Products]) p
ON ti.article_id = p.article_id
END
CASE部分是错误的部分,INCORRECT SYNTAX NEAR CASE。据我所知,使用CASE并不是选择将哪些连接用于Products表的有效方法,所以我想知道确定哪个连接需要的正确方法是什么运行,
感谢。
答案 0 :(得分:0)
您是否尝试过使用If else语句?
答案 1 :(得分:0)
我不认为你可以像这样使用CASE,你必须做这样的事情:
LEFT JOIN (SELECT TOP 1 article_id, merchandise_category, long_desc, division_code, division_desc, group_code, group_desc
FROM [CRM].[Products]) p
ON ti.MERCHANDISE_CATEGORY = p.MERCHANDISE_CATEGORY
WHERE ti.article_id IS NULL
LEFT JOIN (SELECT article_id, merchandise_category, long_desc, division_code, division_desc, group_code, group_desc
FROM [CRM].[Products]) p
ON ti.article_id = p.article_id
WHERE ti.article_id IS NOT NULL
加入两个子查询,但在where子句中使用ti.article_id
。
您必须为第二个子查询使用不同的别名(例如' q'),在主SELECT语句中,使用ISNULL
或COALESCE
返回值,例如:
SELECT ISNULL(p.article_id, q.article_id)
答案 2 :(得分:0)
问题的很大一部分可能在于你在这个子查询中使用TOP 1:
(SELECT TOP 1 article_id, merchandise_category, long_desc, division_code,
division_desc, group_code, group_desc
FROM [CRM].[Products])
正如所写,TOP 1在这里意味着,"独立于此查询中的所有其他内容,从[CRM]中随机选择一行。[产品],并将该行用于我的加入"
我认为这不是意图 - 在这种情况下,您需要澄清(如果您不了解SQL语法,请用英语),这正是您尝试使用TOP完成的内容1.
如果您提供了一些示例数据并显示了所需的输出,那么这种情况非常有用。