2

私は2つのテーブルを持っています。

従業員

EmployeeID, EmployeeName, DocumentType

ドキュメントタイプ

DocumentTypeID, DocumentType

複数の従業員と複数の DocumentTypes があります。

従業員ごとに、存在しない DocumentTypes を表示しようとしています。

従業員ID/従業員名ごとにこれを行うことはできません。すべての従業員に対して存在しない DocumentTypes のリストしか取得できません。

カーソルが各 EmployeeID を通過せずにこれを行うことはできますか?

4

3 に答える 3

0

編集 より良いバージョン

select distinct e.EmployeeID, e.EmployeeName, t.DocumentTypeID, t.DocumentType
from Employee e
cross join DocumentType t
left join Employee e2 on e2.EmployeeID = e.EmployeeID and t.DocumentTypeID = e2.DocumentTypeID
where e2.EmployeeID is null

オリジナル- これは機能しますが、最もエレガントなソリューションとは思えません

select distinct e.EmployeeID, e.EmployeeName, dt.DocumentTypeID, dt.DocumentType
from Employee e
outer apply (
    select * from DocumentType t
    where not exists (
        select 1 
        from Employee e2 
        where e2.DocumentTypeID = t.DocumentTypeID 
        and e2.EmployeeID = e.EmployeeID)
) dt
于 2012-07-19T06:11:35.397 に答える
0

あなたがSQLサーバーを使用していると仮定して

;with cte as (
select E.EmployeeID, E.DocumentType,D.DocumentTypeID from Employee E
 left outer join Document D
on E.DocumentType<>D.DocumentTypeID),
cte1 as (select EmployeeID,DocumentTypeID  from cte
group by  EmployeeID,DocumentTypeID
having count(*)>1)
select * from cte1
union all
select EmployeeID,DocumentTypeID from cte where EmployeeID not in
(select EmployeeID from cte1)
order by EmployeeID,DocumentTypeID 
于 2012-07-19T06:44:13.387 に答える
0

このようなデータを探していると思います

EmployeeID EmployeeName DocumentTypeNotMapped
1          abc          doctype1, doctype3, doctype4
2          def          doctype3, doctype2, doctype7

クエリの使用

SELECT ET.EmployeeID, ET.EmployeeName,
SELECT LEFT(DocumentType, LEN(DocumentType) - 1)
FROM (
    SELECT DISTINCT DocumentType + ', '
    FROM DocumentTypeTable 
    WHERE DocumentType != ET.DocumentType 
    FOR XML PATH ('')
  ) D (DocumentType)
FROM EmployeeTable ET
于 2012-07-19T06:06:22.027 に答える