3

私は次のようなことをしようとしています(疑似-もちろん):

SELECT 
  city,
  CASE WHEN COUNT( [group] ) > 1 THEN 'Multiple' ELSE [group] END  AS Type 
FROM 
  offices
GROUP BY
  city

オフィスには次のような行が含まれています。

ID |   group   |  city
----------------------
1  |    'A'    | 'Houston'
2  |    'B'    | 'Houston'
3  |    'C'    | 'Houston'
4  |    'S'    | 'Boston'
5  |    'R'    | 'Detroit'

結果は次のようになります。

   city   | group
--------------------
 'Houston'| 'Multiple'
 'Boston' |   'S'
 'Detroit'|   'R'

私はあなたができることを知っています:

SELECT 
  City,
  CASE WHEN COUNT([group]) > 1 THEN 
      'Multiple'
  ELSE 
       ( SELECT [group] FROM test WHERE t.City = city )
  END AS CGroup

FROM 
   test t
GROUP BY 
   City

これはもっとシンプルにすべきだと思いました。
サブクエリのない何か?

4

3 に答える 3

8

MIN列のandを見つけて、MAXそれらが同一でない場合に対処できます。

declare @t table (ID int not null,[group] char(1) not null,city varchar(20) not null)
insert into @t(ID,[group],city) values
(1,'A','Houston'),
(2,'B','Houston'),
(3,'C','Houston'),
(4,'S','Boston' ),
(5,'R','Detroit')

select city,
   CASE
      WHEN MIN([group]) != MAX([group]) THEN 'Multiple'
      ELSE MAX([group]) END as [group]
from @t
group by city

サーバーは、句MAXに 2 回表示されているにもかかわらず、実際には 1 回だけ集計を実行するのに十分なほどスマートである必要があります。select

結果:

city                 group
-------------------- --------
Boston               S
Detroit              R
Houston              Multiple
于 2013-07-11T08:00:51.330 に答える
2

@ Damien_The_Unbelieverの答えは完璧です。これは代替案です。複数をチェックしたい場合(例COUNT(GROUP) > 2)。MINorMAXを次のELSEように使用するだけです。

SELECT 
  city,
  CASE WHEN COUNT([group]) > 2 
       THEN 'Multiple' 
       ELSE MAX([group]) END  AS Type 
FROM 
  offices
GROUP BY
  city

このSQLFiddleを参照してください

于 2013-07-11T08:09:04.073 に答える
0

MIN最初のクエリを使用しますが、ELSE部分でa を使用するだけです

SELECT 
    City, 
    CASE
        WHEN COUNT(*) > 1 THEN 'Multiple'
        ELSE MIN(CityGroup)
    END AS CityGroup
FROM Test
GROUP BY CityGroup
于 2013-07-11T08:00:27.970 に答える