仅从多个结果和组合中选择特定结果

时间:2012-07-30 01:04:12

标签: sql-server tsql

我有以下简单查询:

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),否则将其替换为'None Assigned'。

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

干杯

[编辑]

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

如果是1,我需要列出公司和Team_Role_Recid。如果Team_Role_Recid不是1,则需要说'None Assigned'。

CompanyName      TeamRecID

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

公司的Team_Role_Recid记录可以是2,或者只是3,或者数据库中的1和2或1和3等,但我想按上面的方式显示它。

希望有所帮助。

3 个答案:

答案 0 :(得分:1)

使用LEFT JOIN代替,COALESCE代替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

答案 1 :(得分: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 

答案 2 :(得分: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