Sql 根据其他两个表的条件,从不同的表返回结果
我有4个表table1-table4,其中包含与这些名称相关的名称和值,如下所示: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
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没有重复。它们是类似类型的信息,但必须在不同的表中,但要进行比较。