1

我有以下简单的查询:

SELECT
  Company.Company_Name,
  Company_Team.Team_Role_Recid
FROM
  Company
  INNER JOIN
  Company_Team ON Company_Team.Company_RecID = Company.Company_RecID 

Team_Role_Recid 的值可以是:

1, 2, 3 or NULL

或组合。可以有 1 和 2,或者 2 和 3,或者只有 2,或者根本没有,等等。你明白了。

我想始终列出每个 Company_Name 结果,但仅在 Team_Role_Recid 为 1 时显示,否则将其替换为“未分配”。

我在 where 子句中尝试了各种方法,甚至尝试了子查询,在 select 语句中使用 CASE WHEN 进行“未分配”更改,但没有运气。

干杯

[编辑]

我可能没有尽可能清楚。我将添加此内容以尝试使其更清晰。

如果 Team_Role_Recid 为 1,我需要列出 Company 和 Team_Role_Recid。如果 Team_Role_Recid 不是 1,则需要说“未分配”。

CompanyName      TeamRecID

Company A        1
Company B        None Assigned
Company C        None Assigned
Company D        1
Company E        1
Company F        None Assigned

公司在数据库中可以有 2 条 Team_Role_Recid 记录,或者只有 3 条,或者 1 和 2 或者 1 和 3 等,但我想像上面那样显示它。

希望有帮助。

4

3 回答 3

1

改为使用LEFT JOINCOALESCE替换NULL值:

SELECT a.Company_Name,
       COALESCE(b.Team_Role_Recid, 'None Assigned') RecID
FROM   Company a
           LEFT JOIN Company_Team b
               ON b.Company_RecID = a.Company_RecID 
-- WHERE  b.Team_Role_Recid = 1
于 2012-07-30T01:10:37.993 回答
0

你在找这个吗

Declare @Company table(Company_Name Varchar(50),Company_RecID int)
Insert Into @Company 
Select'Company1', 1 Union All Select 'Company2', 2 Union All 
Select 'Company3',3 Union All Select 'Company4',4

Declare @Company_Team table(Company_RecID int,Team_Role_Recid Varchar(10) null)
Insert Into @Company_Team 
Select 1,1 Union All 
Select 1,2 Union All Select 1,3 Union All Select 2, Null Union All
Select 3,1 Union All Select 4,2 Union All Select 4,3


;with cte as(
SELECT
  c.Company_Name,
  ct.Team_Role_Recid,
  status = CASE WHEN ct.Team_Role_Recid = 1 then '1' else 'None Assigned' end
FROM  @Company c
LEFT JOIN  @Company_Team ct ON ct.Company_RecID = c.Company_RecID )

Select distinct Company_Name,Team_Role_Recid from (
SELECT Company_Name,Team_Role_Recid FROM cte WHERE Company_Name NOT IN (SELECT Company_Name FROM cte WHERE status='None Assigned')
Union All
SELECT Company_Name,'None Assigned' FROM cte WHERE status='None Assigned')x

结果

Company_Name Team_Role_Recid

Company1    None Assigned
Company2    None Assigned
Company3    1
Company4    None Assigned
于 2012-07-30T06:42:29.220 回答
0

尝试这个

SELECT a.Company_Name,CASE WHEN isnull(b.Team_Role_Recid,0) = 1 then b.Team_Role_Recid else 'None Assigned' end
FROM   Company a
       LEFT JOIN Company_Team b
       ON b.Company_RecID = a.Company_RecID 
于 2012-07-30T05:17:13.973 回答