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 の場合のみ表示し、それ以外の場合は「None Assigned」に置き換えます。

where句でさまざまな方法を試しましたが、「割り当てられていない」変更のselectステートメントでCASE WHENを使用してサブクエリを試みましたが、運がありませんでした。

乾杯

[編集]

私はできるだけ明確ではなかったかもしれません。これを追加して、わかりやすくします。

Company と Team_Role_Recid が 1 の場合はリストする必要があります。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

会社は、データベースに 2、3、または 1 と 2、または 1 と 3 などの Team_Role_Recid レコードを持つことができますが、上記のように表示したいと考えています。

それが役立つことを願っています。

4

3 に答える 3

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
于 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 に答える