根据来自其他两个表的条​​件从不同表返回结果

时间:2018-05-08 19:41:05

标签: sql sql-server

我有4个表(table1-table4),其中包含与这些名称相关联的名称和值:

表1

ID  Name_1  Name_2

1   Jeff    Jeff

2   Nancy   Jasmine

表2

ID  Name_1  Name_2

3   Jeff    Jeff

4   Nancy   Nancy

表3

Name  Value

Jeff   5.5

Nancy  6.5

表4

Name  Value

Jeff  7.5

Nancy 8.5

我需要从table1获取ID#,并从表3或4中获取值,具体取决于表1和2之间的名称排列方式(将有其他表从中获取返回值但是现在我只是尝试确定2)。

示例......。在上面的表格中,Jeff在表1中出现两次,在表2中出现两次,所以我想从table1返回ID#1,其值为5.5,而Nancy在table1中出现一次,在table2中出现两次,所以我想从table1返回ID#2,从table4返回值8.5。完全是这样的:

ID  Value

1   5.5  (based on the sharing between table1 and table 2 return value from table 3)

2   8.5 (based on the sharing between table1 and table 2 return value from table 4)

我有:

SELECT dbo.table1.ID
    CASE
    WHEN((dbo.table2.Name_1)=(dbo.table2.Name_2) AND
        (dbo.table1.Name_1)=(dbo.table1.Name_2) AND
        (dbo.table2.Name_1)=(dbo.table1.Name_1) AND
        (dbo.table2.Name_2)=(dbo.table1.Name_2) AND
        (dbo.table2.Name_1)=(dbo.table1.Name_2) AND
        (dbo.table2.Name_2)=(dbo.table2.Name_1)) THEN (SELECT dbo.table3.Value FROM dbo.table3 WHERE dbo.table3.Name = dbo.table2.Name_1)
    ELSE Null
    END AS Value
FROM dbo.table1, dbo.table3
INNER JOIN dbo.table2 ON dbo.table3.Name = dbo.table2.Name_1

返回的是:

ID#  Value

1    5.5

2    NULL

在表1和表2之间存在更多共享名称的方法,我需要根据共享从各个表返回的值。

如果我想返回Nancy,我会像这样编写上述查询:

SELECT dbo.table1.ID
    CASE
    WHEN((dbo.table2.Name_1)=(dbo.table2.Name_2) AND
        (dbo.table1.Name_1)<>(dbo.table1.Name_2) AND
        (dbo.table2.Name_1)=(dbo.table1.Name_1) AND
        (dbo.table2.Name_2)<>(dbo.table1.Name_2) AND
        (dbo.table2.Name_1)<>(dbo.table1.Name_2) AND
        (dbo.table2.Name_2)=(dbo.table2.Name_1)) THEN (SELECT dbo.table4.Value FROM dbo.table4 WHERE dbo.table4.Name = dbo.table2.Name_1)
    ELSE Null
    END AS Value
FROM dbo.table1, dbo.table4
INNER JOIN dbo.table2 ON dbo.table4.Name = dbo.table2.Name_1

我明白了:

ID#  Value

1    NULL

2    8.5

对于我的生活,我无法弄清楚如何将它们组合成这样的结果:

ID#  Value

1    5.5

2    8.5

任何人对我如何能够做到这一点有什么想法,或者我可以对我必须做的事情进行哪些调整?我首先尝试添加多个案例,但因为我需要从两个表中选择并加入它才会起作用(或者至少我不知道该怎么做)。

0 个答案:

没有答案