sqlserver数据库,sql语句问题

想把b表放到sum里面进行查询,只留 a表(from a),这种的,怎么改啊 ?

不要left join b这个了


SELECT 

SUM( CASE WHEN(( a.c_ajzlb = 'aaa' OR a.c_ajzlb = 'bbb' OR a.c_ajzlb = 'ccc' )) 

AND b.d_hxjarq BETWEEN '2020-01-01' AND '2020-06-01' 

THEN 1 ELSE 0 END )  数1

from  a

left JOIN  b on a.c_bh = b.c_ajbh


xiaomili 发布于 2020-6-3 14:31 (编辑于 2020-6-3 14:31)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
axingLv6专家互助
发布于2020-6-3 14:47(编辑于 2020-6-4 11:12)

试一下,还是原来的写法易于理解

SELECT 
SUM( 
select 
CASE WHEN ( a.c_ajzlb = 'aaa' OR a.c_ajzlb = 'bbb' OR a.c_ajzlb = 'ccc' )
AND b.d_hxjarq BETWEEN '2020-01-01' AND '2020-06-01' 
THEN 1 ELSE 0 END from b where a.c_bh = b.c_ajbh)  数1
from a

-----

with t as (
SELECT 
(select 
CASE WHEN ( a.c_ajzlb = 'aaa' OR a.c_ajzlb = 'bbb' OR a.c_ajzlb = 'ccc' )
AND b.d_hxjarq BETWEEN '2020-01-01' AND '2020-06-01' 
THEN 1 ELSE 0 END from b where a.c_bh = b.c_ajbh
)  数1 from a)
select sum(数1) from t


最佳回答
0
豆豆小可爱Lv5中级互助
发布于2020-6-3 14:35(编辑于 2020-6-3 16:54)

没太看明白什么意思,这么写是有啥问题吗?

SELECT 

SUM( CASE WHEN ( a.c_ajzlb = 'aaa' OR a.c_ajzlb = 'bbb' OR a.c_ajzlb = 'ccc' )

AND a.c_bh IN (SELECT b.c_ajbh FROM b WHERE b.d_hxjarq BETWEEN '2020-01-01' AND '2020-06-01' )

THEN 1 ELSE 0 END )  数1

from  a


  • xiaomili xiaomili(提问者) 语句没问题,只是不想下面用left join 关联,想放上面,要不然跟生产数据有差异
    2020-06-03 15:28 
  • 豆豆小可爱 豆豆小可爱 回复 xiaomili(提问者) 你看我修改的能运行吗?感觉这么写效率不是很高。
    2020-06-03 16:55 
  • xiaomili xiaomili(提问者) 回复 豆豆小可爱 运行不了,提示:SQL 错误 [130] [S0001]: 不能对包含聚合或子查询的表达式执行聚合函数。
    2020-06-04 09:01 
最佳回答
0
snrtuemcLv8专家互助
发布于2020-6-3 14:41

a表和b表是要主键关联才可以进行查询,不用关联,你查出来的数据就是有问题的

你的sum中要同时满足ab表阻断要求的

  • 4关注人数
  • 491浏览人数
  • 最后回答于:2020-6-4 11:12
    请选择关闭问题的原因
    确定 取消
    返回顶部