Sql Join子句中的Case语句
我试图从多个表中获取数据,但不确定如何做到这一点。下面是我正在使用的一个查询,但它不起作用。请建议Sql Join子句中的Case语句,sql,sql-server,Sql,Sql Server,我试图从多个表中获取数据,但不确定如何做到这一点。下面是我正在使用的一个查询,但它不起作用。请建议 SELECT DISTINCT VWL.Type, VWL.ID AS CompanyID,VWL.Name FROM dbo.LeadList_New AS VWL LEFT OUTER JOIN CASE VWL.Type WHEN 'COMPANY' THEN CRMCompanyEmailAddress AS CE
SELECT DISTINCT
VWL.Type, VWL.ID AS CompanyID,VWL.Name
FROM dbo.LeadList_New AS VWL
LEFT OUTER JOIN
CASE VWL.Type WHEN 'COMPANY' THEN
CRMCompanyEmailAddress AS CE ON VWL.ID=CE.CRMCompanyID
WHEN 'PERSON' THEN
PersonEmailAddress AS PE ON VWL.ID=PE.PersonID
END
您不能将表与
案例
联接,可能您希望这样:
SELECT DISTINCT VWL.Type, VWL.ID AS CompanyID, VWL.Name,
CASE WHEN VWL.type = 'COMPANY'
THEN CE.Name
ELSE PE.Name
END AS EntityName
FROM dbo.leadlist_new AS VWL
LEFT OUTER JOIN crmcompanyemailaddress AS CE
ON VWL.id = CE.crmcompanyid
LEFT OUTER JOIN personemailaddress AS PE
ON VWL.id = PE.personid
您应该将CASE语句移动到SELECT正文中:
SELECT DISTINCT
VWL.Type, VWL.ID AS CompanyID,VWL.Name
case VWL.Type
when 'COMPANY' then CE.Address
when 'PERSON' then PE.Address
end
FROM dbo.LeadList_New AS VWL
LEFT OUTER JOIN CRMCompanyEmailAddress as CE on VWL.ID=CE.CRMCompanyID
LEFT OUTER JOIN PersonEmailAddress as PE on VWL.ID=PE.PersonID
或者只是为公司和个人合并两份声明
SELECT VWL.Type, VWL.ID AS CompanyID,VWL.Name,CE.Address as Address
FROM dbo.LeadList_New AS VWL
LEFT OUTER JOIN CRMCompanyEmailAddress as CE on VWL.ID=CE.CRMCompanyID
WHERE VWL.Type='COMPANY'
UNION
SELECT VWL.Type, VWL.ID AS CompanyID,VWL.Name,PE.Address as Address
FROM dbo.LeadList_New AS VWL
LEFT OUTER JOIN PersonEmailAddress as PE on VWL.ID=PE.PersonID
WHERE VWL.Type='PERSON'
任何特定的SQL语句都必须具有特定的“形状”——涉及哪些表、列等,它们的类型等等。更改查询中包含哪些表的唯一方法是将其构造为字符串(动态SQL)。也就是说,我不清楚您想要实现什么-您在联接的
左侧的列上执行了一个不同的操作,并且在右侧的列上没有选择任何列-即使根本没有发生联接,整个查询的结果也将是相同的。你能解释一下你想要实现什么吗?请在描述中添加一个表中数据的例子。我认为联合是最好的选择。也许使用UNION ALL来代替。@Dd2主题启动程序需要不同的行,所以我使用UNION来消除所有的重复