我有一张带有ID的表:
--FIRST TABLE--
| IDCLIENT | DATE |
112102 2013-10-11
下表将始终具有第一个表的ID。
--SECOND TABLE--
| IDCLIENT | VALUE | OTHERCOLUMNS
112102 50
112103 30
但是这个其他表可能没有第一个表的ID。
--THIRD TABLE--
| IDCLIENT | VALUE | OTHERCOLUMNS
112102 10
如果ID只在第二个表上,我想选择该行。如果ID在两个表中,我想只选择第三个表上的行。我怎样才能做到这一点?我尝试使用连接但没有成功。
更新
我想要SUM()VALUE列上的值。
答案 0 :(得分:0)
我假设你在上有一个拼写错误“如果ID只在第二个表上,我想选择那一行。如果ID在两个表中,我想选择第二个表格中的行“。这意味着您要始终从第二个表中选择,而不是从第三个表中选择。
所以我想你想从第三个中选择是否有匹配的ID,否则使用第二个作为“后备”-table。
您可以将EXISTS
与CASE
:
SELECT t1.IDCLIENT,
CASE WHEN EXISTS(SELECT 1 FROM dbo.Table3 t3
WHERE t3.IDCLIENT = t1.IDCLIENT)
THEN (SELECT TOP 1 t3.Value FROM dbo.Table3 t3
WHERE t3.IDCLIENT = t1.IDCLIENT)
ELSE (SELECT TOP 1 t2.Value FROM dbo.Table2 t2
WHERE t2.IDCLIENT = t1.IDCLIENT)
END AS Value
FROM dbo.Table1 t1
我想要SUM()VALUE列上的值。
然后您可以在上面的查询中使用子查询,如:
SELECT SUM(X.Value) FROM(
SELECT t1.IDCLIENT,
CASE WHEN EXISTS(SELECT 1 FROM dbo.Table3 t3
WHERE t3.IDCLIENT = t1.IDCLIENT)
THEN (SELECT TOP 1 t3.Value FROM dbo.Table3 t3
WHERE t3.IDCLIENT = t1.IDCLIENT)
ELSE (SELECT TOP 1 t2.Value FROM dbo.Table2 t2
WHERE t2.IDCLIENT = t1.IDCLIENT)
END AS Value
FROM dbo.Table1 t1
) X
答案 1 :(得分:0)
听起来你需要在那里进行LEFT JOIN。
阅读Here
答案 2 :(得分:0)
我认为您需要为该值使用case语句。下面就是我的头脑,所以如果不起作用,你可能需要使用完全加入。
select t1.date, case when t3.IDCLIENT is not NULL then t3.value else t2.value end as Value
from Table1 t1 inner join Table2 t2 on t1.IDCLIENT = t2.IDCLIENT inner join
Table3 t3 on t1.IDCLIENT = t3.IDCLIENT