2017-06-16 57 views
1

我是一个长期的潜伏者,第一次海报,所以请温柔!使用连接,如果在SQL server语句2012

我做的if语句一些搜索,但不能完全找到正确的答案。如果我要求一个愚蠢的问题,请随时指出我可能错过的一条线索。但无论如何,在这里去...

我想查询在事件管理系统中的两个表 - 一个拥有事件的细节,其他持有第三方公司的引用,所以我试图让事件的详细信息,以及如果参考文献存在,则从不同的第三方引用。如果它不存在,我想要返回一个空行。但我真的不知道所需的语法。

我使用来测试代码是非常基本的:

SELECT i.incident_number, 
r.reference 
FROM incidents.i inner join references r 
ON 
i.incident_number = r.incident_number 

有在包含供应商的细节,所以我想说的参考文献表中的列,如果在引用的供应商列中包含“供应商2',然后返回参考列的内容,如果没有对该供应商的引用,则返回一个空白行。

我希望这是有道理的。如果需要,我很乐意提供更多信息。 在此先感谢。

+0

这将是更容易帮助你,如果你表现出对样本数据两个表格和您期望的输出。 –

+0

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql –

回答

1

我认为你正在寻找一个left join

SELECT i.incident_number, r.reference 
FROM incidents.i LEFT JOIN 
    references r 
    ON r.incident_number = i.incident_number AND 
     r.supplier = 'Supplier 2'; 
+0

完美,谢谢! – user8171411

0

所以我想说的是,如果引用的供应商列包含 “供应商2”,则返回的内容参考列的,如果 存在对供应商的参考,返回一个空行。

你想要的是一个CASE声明像

SELECT i.incident_number, 
r.reference, 
case when r.supplier = 'supplier2' then r.supplier else null end as supplier 
FROM incidents.i inner join [references] r 
ON i.incident_number = r.incident_number 
+0

感谢如何使用CASE一个很好的例子。这并不是我在这个例子中所追求的,但是这有助于下一周我需要看的另一件事。 – user8171411