我有下表:
maker model type
B 1121 pc
A 1233 pc
E 1260 pc
A 1752 laptop
A 1276 printer
D 1288 printer
我需要收到以下形式的结果:maker,pc。如果某个特定的制造商拥有给定类型的模型,我需要将“是”这个词与括号中的模型数量连接起来。防爆。制造商'A'是(1)。那么,我怎样才能避免以下重复?
CASE
WHEN SELECT COUNT(*) WHERE ... > 0
THEN 'yes(' + CAST((SELECT COUNT(*) WHERE ...) AS varchar) + ')'
这不是一个现实世界的问题。我只需要了解如何保存子查询结果以在分支语句中使用它。此分支语句的结果可能包含子查询结果本身。
答案 0 :(得分: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查询以符合您的要求。