0

次のタブがあります(太字はPK、イタリックはFKです)

発明者 (発明者ID 、 発明者ファースト 、 発明者ラスト 、パテント番号)

assignees( assigneeID , AssigneeName, AssigneeCity, AssigneeState 特許番号)

InventorID と Assignee ID は、単にインデックスを作成するための自動番号付けされた ID であり、それ以外の場合は意味がありません。

私が見つけようとしているのは、姓と名が同じであるが、少なくとも 2 人の異なる担当者がいる場合です。

私がこれまでに持っているもの(私が知っていることは非常に最小限です)

SELECT a.assigneename, i.inventorfirst+' '+ i.inventorlast as Name
FROM inventors i, assignees a
WHERE i.patentno=a.patentno
4

2 に答える 2

0

発明に対して複数の譲受人名を持つInventorFirstのリストが必要な場合は、次のことを試してください。

;with inventor_cte(inventorfirst,cnt)
as
  (
  SELECT 
        i.inventorfirst
        , count(distinct a.assigneename) cnt
  FROM 
       inventors i 
       inner join  assignees a ON 
            i.patentno=a.patentno
  GROUP BY i.inventorfirst
  )
select inventorfirst from inventor_cte where cnt>1

上記の代わりに、次のHAVING句を使用できます。

 SELECT i.inventorfirst
  FROM 
       inventors i 
       inner join  assignees a ON 
            i.patentno=a.patentno
  GROUP BY i.inventorfirst
  HAVING count(distinct a.assigneename) > 1

私は最初の構文を好みます - どちらがより効率的かはわかりません。

于 2012-07-21T10:07:19.347 に答える
0

ここでは、異なる担当者に左外部結合を使用しました。
発明者に譲受人がいない場合、'isnull' 関数は空白の値を入力します。
以下のSQLクエリを使用してください:

SELECT 
      isnull(a.assigneename,'') as assigneename
      , i.inventorfirst+' '+ i.inventorlast as Name
FROM 
     inventors i 
     left outer join  assignees a on 
          i.patentno=a.patentno


于 2012-07-21T08:08:14.870 に答える