我有一张表ContractTable
,其中有三列,如下所示
ContractID | CompanyID | ContractorID
-----------+------------+----------
2 | 37725 | 37730
此表与此视图ViewNameList
:
ID | CompanyTitle
-----------+--------------
37725 | X
37730 | Y
我不希望得到两个加入的结果。有没有办法得到像下面这样的结果?
ContractID | CompanyID | ContractorID
-----------+------------+----------
2 | X | Y
答案 0 :(得分:0)
您需要JOIN
两次视图
select y.ContractID,v1.CompanyTitle as CompanyID,v2.CompanyTitle as ContractorID
from yourtable y
Left join view v1 on y.CompanyID = v1.ID
Left join view v2 on y.ContractorID = v2.ID
如果您不想加入两次,请尝试此
SELECT y.ContractID,
Max(CASE WHEN y.CompanyID = v.ID THEN v.CompanyTitle END) AS CompanyID,
Max(CASE WHEN y.ContractorID = v.ID THEN v.CompanyTitle END) AS ContractorID
FROM yourtable y
JOIN [view] v
ON v.ID IN ( y.CompanyID, y.ContractorID )
GROUP BY y.ContractID
答案 1 :(得分:0)
如果加入困扰你,你可以在没有任何联接的情况下做到这一点。即:
SELECT t1.ContractID ,
(SELECT CompanyTitle FROM ViewNameList t2 WHERE t2.ID = t1.CompanyID) CompanyID,
(SELECT CompanyTitle FROM ViewNameList t2 WHERE t2.ID = t1.ContractorID) ContractorID
FROM ContractTable t1;
当然,在Linq中这样做更容易:
var contracts = from c in db.Contracts
select new {
ContractID = c.ContractID,
CompanyID = c.Company.CompanyTitle,
ContractorID = c.Contractor.CompanyTitle
};