Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据其他两个表的条件,从不同的表返回结果_Sql_Sql Server - Fatal编程技术网

Sql 根据其他两个表的条件,从不同的表返回结果

Sql 根据其他两个表的条件,从不同的表返回结果,sql,sql-server,Sql,Sql Server,我有4个表table1-table4,其中包含与这些名称相关的名称和值,如下所示: 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) ID# Value 1 5.5 2

我有4个表table1-table4,其中包含与这些名称相关的名称和值,如下所示:

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)
ID#  Value

1    5.5

2    8.5
表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
我需要从表1中获取ID,从表3或表4中获取值,这取决于名称在表1和表2之间的排列方式。还需要从其他表中获取返回值,但现在我只想确定2

例如……在上面的表格中,Jeff在表1中出现两次,在表2中出现两次,因此我想从表1返回ID1,从表3返回值为5.5,而Nancy在表1中出现一次,在表2中出现两次,因此我想从表1返回ID2,从表4返回值为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)
ID#  Value

1    5.5

2    8.5
我有:

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   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)
ID#  Value

1    5.5

2    8.5

有没有人知道我如何才能做到这一点,或者我可以对我必须做的事情做些什么调整?我第一次尝试添加多个案例,但因为我需要从两个以上的表中进行选择并将其连接起来,所以无法正常工作,或者至少我不知道如何进行操作。

至少可以说,这是一个奇怪的设计。为什么数据库中有重复的表?除非您能够解释从表1还是表2提取的标准,否则可能很难为您提供帮助。你说的是取决于分享。你能解释一下依赖到底是什么意思吗?对不起。我会尽量澄清一点。表3和表4是基于不同公式计算的值指数,还有三个表,但在合并更多表之前,我只是想让两个表起作用。如果表1和表2中的名称1和2都相同,则从表3中提取该值。如果表1和表2中的三个相同,则从表4中拉出。如果表1和表2中的两个匹配,则从表5中拉出。如果名称1和名称2彼此不匹配,但在表1和表2中都匹配,则从表6中删除。如果表1和表2没有匹配项,则从表7中提取。现在……每组名称都属于一个类别。所以Cat1Name_1、Cat1Name_2、Cat2Name_1、Cat2Name_2……直到Cat25_2。将有50个名称字段配对,以便在表1和表2中进行比较。所有Cat1名称将与Cat1名称进行比较,以返回Cat1值。为了让事情尽可能简单,我在最初的问题中只展示了一个类别……表1和表2没有重复。它们是类似类型的信息,但必须在不同的表中,但要进行比较。