2

我有下表:

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

我需要以以下形式收到结果:制造商、电脑。如果特定制造商有给定类型的模型,我需要将“是”这个词与括号中的模型数量连接起来。前任。是(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 

我不扩展连接字符串的解决方案,因为我看到您知道该怎么做。可以自由更改第一个或第二个 CTE 查询以符合您的要求。

于 2012-10-18T12:46:38.230 回答