18回答

0收藏

SQL:多个具有不同条件的计数句

技术问答 技术问答 611 人阅读 | 18 人回复 | 2022-03-03

我只想知道是否有任何方法可以使用查询从一个表中获得两个单独的计数总数?换句话说,使用类似于下表的表,我想检索每个代码(不同)并显示状态总数不等于X或D然后增加一列显示状态总数等于X或D,并且取消日期大于给定日期(如最近14天)。$ N( V- r% l; J! j% l8 z, N
桌子:7 o/ w8 o3 _4 d, Z) X. _
Code:  Status  Cancel_Date-----------------------------------AAA    X        2012年 -02-01AAABBB    X        2012年 -02-01AAA    D        2012年 -01-01AAABBB    BBB    D        2012年 -02-01BBB    X        2012年 -01-01结果示例(基于以上数据):
( I: I1 G( Y; ^; d$ pCode:  TotalNotXorD     TotalXorD------------------------------------AAA     2                                                                                                                                                                                                                            BBB                                                                                                                                              TotalNotXorD:例如
5 I) w8 I1 V5 M# p$ yselect code,count(*) from table where status not in('X','D') group by codeTotalXorD:例如2 U! \8 ^; W- n2 H5 l- A0 n5 r3 U
select code,count(*) from table where status in('X','D')   and cancel_date >= '2012-02-01' group by code我看过做子查询,但似乎得不到所需的结果。
& `6 S7 I( y) Y. f6 }, Q3 d* X有什么想法吗?
" [# g( y! K- W) G' u  U谢谢。
2 l) a( ^/ l( v0 q1 ^                                                               
/ ^9 o- q1 M4 m, P& Q    解决方案:                                                               
1 g) \: y( g3 L7 H5 \                                                                ~~~~
" G& m% ?& H$ e+ K/ _; QSELECT  a.code,       COALESCE(b.totalNotXorD,0 ) totalNotXorD,       COALESCE(c.totalXorD,0 ) totalXorD,FROM    (SELECT DISTINCT Code FROM tableName) a        LEFT JOIN    select code,count(*) totalNotXorD            from table             where status not in('X','D          group by code       b ON a.code = b.code        LEFT JOIN    select code,count(*) totalXorD            from table             where status in('X','D')               and cancel_date >= '2012-02-01'             group by code        ) c ON a.code = c.code或干脆做 CASE
0 I' Q% ^; m! vSELECT  Code,       SUM(CASE WHEN status NOT IN ('X','D') OR status IS NULL THEN 1 ELSE 0 END) TotalNotXorD,       SUM(CASE WHEN status IN ('X','D') AND cancel_date >= '2012-02-01' THEN 1 ELSE 0 END) TotalXorD  FROM    tableNameGROUP   BY Code
分享到:
回复

使用道具 举报

回答|共 18 个

路人甲干上路人乙

发表于 2022-3-3 22:42:28 | 显示全部楼层

前排顶,很好!
回复

使用道具 举报

長月北見

发表于 2022-3-5 12:53:06 | 显示全部楼层

这么强,支持楼主,佩服
回复

使用道具 举报

爱月

发表于 2022-3-6 14:15:43 | 显示全部楼层

回复

使用道具 举报

她在云上飞

发表于 2022-3-6 21:24:09 | 显示全部楼层

真心不错
回复

使用道具 举报

花前月下

发表于 2022-3-7 13:56:22 | 显示全部楼层

支持支持再支持
回复

使用道具 举报

网购

发表于 2022-3-8 08:57:34 | 显示全部楼层

站位支持
回复

使用道具 举报

零和博弈的人

发表于 2022-3-8 19:40:37 | 显示全部楼层

1v1飘过
回复

使用道具 举报

赵爽

发表于 2022-3-9 02:37:00 | 显示全部楼层

1v1飘过
回复

使用道具 举报

雨来雨往

发表于 2022-3-9 08:23:06 | 显示全部楼层

路过 帮顶 嘿嘿
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

29055 积分
9659 主题
热门推荐