2

次の表があります。

maker   model   type
B   1121    pc
A   1233    pc
E   1260    pc
A   1752    laptop
A   1276    printer
D   1288    printer

結果を maker, pc の形式で受け取る必要があります。特定のメーカーが特定のタイプのモデルを持っている場合、「はい」という言葉とモデルの数を括弧内に連結する必要があります。元。はい(1) メーカー「A」の場合。では、どうすれば次の重複を避けることができますか?

CASE 
WHEN SELECT COUNT(*) WHERE ... > 0
THEN 'yes(' + CAST((SELECT COUNT(*) WHERE ...) AS varchar) + ')'

これは現実世界の問題ではありません。サブクエリの結果を保存して分岐ステートメントで使用する方法を理解する必要があるだけです。この分岐ステートメントの結果には、サブクエリの結果自体が含まれる場合があります。

4

1 に答える 1

3

テーブルの作成:

create table #t (maker varchar(100), model  varchar(100), type varchar(100) );
insert into #t ( maker,   model,   type )  values 
( 'B',   '1121',    'pc'),
( 'A',   '1233',    'pc'),
( 'E',   '1260',    'pc');

簡単な手順でクエリを実行します。

;with 
totals as (
   select maker, type,
       count( * ) as n
   from
       #t
   group by 
      maker,  type
      ) ,
maker_type as (
   select distinct maker, type
   from #t
)
select 
   mm.*, t.n, 
   case  when t.n is null then 'No' else 'Yes' end as yes_no
from
   maker_type mm
left outer join
   totals t
      on mm.maker = t.maker and
         mm.type = t.type

結果

maker type n yes_no 
----- ---- - ------ 
A     pc   1 Yes    
B     pc   1 Yes    
E     pc   1 Yes 

文字列を連結するソリューションを拡張しません。その方法を知っているからです。要件に合わせて、最初または 2 番目の CTE クエリを自由に変更してください。

于 2012-10-18T12:46:38.230 に答える