一个表中基于两列的SQL结果列表,该列等于另一表中的特定值

时间:2018-08-08 17:26:34

标签: sql-server

因此,我希望从TableA(帐户表)中找到一个“帐户”列表,该表在表B(信息表)中设置了两个特定值。

表A列出了所有帐户,开设日期,参考资料等,表B包含了这些帐号以及所有特定的帐户信息。

我想要一个在表B中设置了两个特定值的帐户列表。

表和列:

表A:帐号,帐户是否仍处于打开状态?

表B:帐号,信息号,信息数据

我想要一个表A中所有帐户的列表,其中表B中的信息编号1等于10,信息编号2等于20。

样本数据:

表A

Account Number  Is Account still open
1234            Yes
12345           No
123456          Yes

表B

Account  Number  Information Number Information data
1234     1       10
1234     2       20
12345    1       10
12345    2       20
123456   1       1000
123456   2       2000

因此,一旦执行了我的SQL查询,它应该给出帐户1234的最终结果,因为它是唯一一个信息编号1 = 10,信息编号2 = 20并且该帐户仍处于打开状态的帐户。

到目前为止,我唯一想到的就是使用CASE或Union语法。我仍在学习SQL语言,因此任何帮助将不胜感激。希望我已经解释了。

3 个答案:

答案 0 :(得分:0)

使用内部联接

SELECT ta.ACCOUNT_NUMBER FROM TABLE A as ta INNER JOIN TABLE B as tb ON ta.ACCOUNT_NUMBER = tb.ACCOUNT_NUMBER WHERE ta.IS_ACCOUNT_OPEN = 'yes' AND tb.INFORMATION_DATA IN ( 10, 20 )

答案 1 :(得分:0)

尝试此查询:

SELECT * FROM tableA A
WHERE EXISTS(SELECT 1 FROM tableB
             WHERE information number 1 = 10
               AND information number 2 = 20
               AND AccountNumber = A.AccountNumber) 

答案 2 :(得分:0)

使用case whenjoin

select a.* from TableA a inner join     
 (select 
    case when (number=1 and information_number=10)
     or  (number=2 and information_number=20) then account_number else 
  null as account_number 
    from tableB 
) b on a.account_number =b.account_number