0

在建筑项目的 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(或自定义文本)。

有任何想法吗?

4

2 回答 2

0

您可以根据返回的记录数执行分组语句,然后执行 case 语句。

于 2012-09-11T13:15:08.280 回答
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

这只是从帐户表中返回单例地址。

于 2012-09-11T13:51:25.060 回答