1

私は、これにどのグループ別および/または個別およびcount()フォーメーションが役立つかを理解しようと頭を悩ませていますが、現在空白を描いています。

次の表を検討してください。

PersonId | PlaceName
---------+----------
    1    |   NULL
    1    |   NULL
    2    |   NULL
    2    | Las Vegas
    3    | London
    4    |   NULL
    4    |   NULL
    4    |   NULL

「地名」をわざわざ入力していない人を探しているので、出力を次のようにしたいと思います。

PersonId
--------
    1
    4

私は実際に他のいくつかのテーブルに参加して、各「悪党」の情報を引き出しますが、私の問題の核心は上記のものです.

4

5 に答える 5

2

次のクエリを使用します。

SELECT PersonId
  FROM TheTable
 GROUP BY PersonId
 HAVING COUNT(PlaceName) = 0

COUNT()集計関数は s を無視するためNULL、正しい結果が返されるはずです。

于 2012-08-09T16:19:23.667 に答える
1
select PersonId
from MyTable
group by PersonId
having count(case when PlaceName is not null then 1 end) = 0

SQLフィドルの例

于 2012-08-09T16:14:03.013 に答える
1
select distinct t1.id
from test t1
LEFT JOIN
(
  select id, count(name) nm
  from test 
  where name is not null
  group by id
) x
  on t1.id = x.id
where x.nm is null

デモで SQL Fiddle を参照してください

于 2012-08-09T16:16:31.050 に答える
0
SELECT DISTINCT PersonId
FROM MyTable t
WHERE NOT EXISTS(SELECT 1 FROM MyTable WHERE PersonId = t.PersonId AND PlaceName is not null)
于 2012-08-09T16:30:08.240 に答える
0

私は以下を提供します:

select distinct a.personid 
  from tablename a
  left outer join tablename b
    on a.personid=b.personid
   and b.placename is not null
 where b.personid is null
order by personid
于 2012-08-09T16:15:58.673 に答える