在建筑项目的CRM中,客户,建筑师和其他承包商都以帐户形式存在。表PROJ_AC_LINK将ACCOUNT链接到PROJECT,PROJ_AC_LINK.ROLE_TYPE_ID字段指定该链接代表的内容(例如,Joe Simms在“架构师”角色下链接到项目101)。
CRM数据库和用户界面允许用户将多个帐户链接到同一角色下的项目。在某些情况下这很好(项目有2个架构师),但在某些情况下它不是(我们应该只为项目开具一个'客户')。我不能改变CRM。
来自单独系统的查询试图获取SITE_ADDRESS和CLIENT_ADDRESS,并假设只有一个客户端链接到每个项目。它会像这样查询(205是角色'client'的代码):
SELECT
PROJECT.ADDRESS AS SITE_ADDRESS,
ACCOUNT.ADDRESS AS CLIENT_ADDRESS
FROM PROJECT
LEFT JOIN PROJ_AC_LINK ON
(PROJ_AC_LINK.PROJECT_ID = PROJECT.PROJECT_ID
AND
PROJ_AC_LINK.ROLE_TYPE_ID = '205')
LEFT JOIN ACCOUNT ON PROJ_AC_LINK.ACCT_ID = ACCOUNT.ACCT_ID
如果没有链接到项目的客户端,此查询仍会返回SITE_ADDRESS,但会为CLIENT_ADDRESS返回NULL,这正是我想要的。
使用该系统的人知道告诉CRM人员他们是否通过空白客户地址。但是,我需要满足将多个客户端链接到项目的可能性。
如果PROJ_AC_LINK中有多个针对该角色的项目的记录,我可以使CLIENT_ADDRESS返回NULL(或自定义文本)。
有什么想法吗?
答案 0 :(得分:0)
您可以根据您返回的记录数执行group by语句,然后执行case语句。
答案 1 :(得分:0)
这是一种方式:
SELECT p.ADDRESS AS SITE_ADDRESS,
a.ADDRESS AS CLIENT_ADDRESS
FROM PROJECT p LEFT JOIN
(select a.PROJECT_ID, a.ADDRESS
from ACCOUNT a join
Proj_AC_Link pa
on pa.Acct_id = a.Acct_Id
where pa.ROLE_TYPE_ID = '205'
group by ac.Project_id
having count(*) = 1
) addr
ON P.PROJECT_id = addr.project_id
这只返回帐户表中的单个地址。