gpt4 book ai didi

sql-server - 重构 T-SQL 嵌套 SELECT 查询以在 case 语句中使用

转载 作者:行者123 更新时间:2023-12-04 05:28:05 26 4
gpt4 key购买 nike

我有下表:

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

我需要以以下形式接收结果:制造商,电脑。如果特定制造商具有给定类型的模型,我需要将"is"与括号中的模型数量连接起来。例如。是(1)对于制造商'A'。那么,如何避免以下重复呢?
CASE 
WHEN SELECT COUNT(*) WHERE ... > 0
THEN 'yes(' + CAST((SELECT COUNT(*) WHERE ...) AS varchar) + ')'

这不是现实世界的问题。我只需要了解如何保存子查询结果以在分支语句中使用它。此分支语句的结果可能包含子查询结果本身。

最佳答案

创建表:

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
Results :
maker type n yes_no 
----- ---- - ------
A pc 1 Yes
B pc 1 Yes
E pc 1 Yes
我不扩展连接字符串的解决方案,因为我知道您知道如何去做。可以自由更改第一个或第二个 CTE 查询以满足您的要求。

关于sql-server - 重构 T-SQL 嵌套 SELECT 查询以在 case 语句中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12954781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com