0

以下のようなデータを使用して、可能であれば 1 つの SQL クエリを使用して、NULL を持つレコードの数と重複の数を報告するレポートを生成する必要があります。

DES   |  VAL
--------------
Tango |  32
Zulu  |  [null]
Golf  |  12
Golf  |  12
Bravo |  [null]

レポートは次のようになります。

NULLS  |  DUPLICATES
---------------------
  2    |    1

のようなものでnullを取得でき、SUM(CASE VAL WHEN NULL THEN 1 ELSE 0 END) AS NULLS個別に複製できますが、1つのクエリとしては取得できないため、可能かどうかさえわかりません。

4

4 に答える 4

1
SELECT
  (SELECT COUNT(*) FROM table_name WHERE val IS NULL) 
    AS NULLS,
  (SELECT ( COUNT(val) - COUNT(DISTINCT(val)) ) FROM table_name) 
    AS DUPLICATES
于 2012-05-23T23:18:42.610 に答える
0

重複する行を数えたいと仮定すると(?!)、これはあなたが望むものに近づくかもしれません:

declare @Foo as Table ( DES VarChar(10), VAL Int Null )
insert into @Foo ( DES, VAL ) values
  ( 'Tango', 32 ),
  ( 'Zulu', NULL ),
  ( 'Golf', 12 ), ( 'Golf', 12 ), ( 'Golf', 13 ),
  ( 'Bravo', NULL ),
  ( 'Whiskey', 8388 ), ( 'Whiskey', 8388 ), ( 'Whiskey', 8388 ), ( 'Whiskey', 8388 )

select * from @Foo

select distinct DES, VAL from @Foo

select ( select Count( 42 ) from @Foo where VAL is NULL ) as [NULLS],
  ( select Count( 42 ) from @Foo ) - Count( 42 ) as [DUPLICATES] from ( select distinct DES, VAL from @Foo ) as Elmer
于 2012-05-24T02:24:12.773 に答える
0

そのような単純なレポートに結合したいスカラー値を返す2つの選択がある場合は、次のようにすることができます。

SELECT 
2 AS NULLS,
DUPS
FROM (SELECT 1 AS DUPS) D

結果:

NULLS       DUPS
----------- -----------
2           1

必要に応じて2つの選択を置き換えます。

于 2012-05-23T23:17:14.627 に答える
0

重複をどのように数えたいかわからないので、2 つのバージョンを含めました。

declare @T table
(
  DES varchar(10),
  VAL int
)

insert into @T values
('Tango',   32),
('Zulu',    null),
('Zulu',    null),
('Zulu',    null),
('Golf',    12),
('Golf',    12),
('Bravo',   null)

select sum(case when T.VAL is null then C end) as NULLS,
       sum(case when T.C > 1 then C-1 end) as DUPLICATES1,
       sum(case when T.C > 1 then 1 end) as DUPLICATES2
from (
       select VAL, count(*) as C
       from @T
       group by DES, VAL
     ) T

結果:

NULLS       DUPLICATES1 DUPLICATES2
----------- ----------- -----------
4           3           2
于 2012-05-24T03:53:48.097 に答える