基于先前值使用不同字段连接相同表

时间:2015-11-04 13:43:08

标签: sql left-join

我尝试根据另一个表中存在的值加入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表的有效方法,所以我想知道确定哪个连接需要的正确方法是什么运行,

感谢。

3 个答案:

答案 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语句中,使用ISNULLCOALESCE返回值,例如:

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.

如果您提供了一些示例数据并显示了所需的输出,那么这种情况非常有用。