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