• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

SQL 分组查询问题

chuting1 2018-07-12 11:09:08
表格sellinfo

ID bh rq A1 A2 A3
1 c1 2018-07-01 5 0 0
2 c1 2018-07-01 0 10 0
3 c1 2018-07-12 0 20 0
4 c2 2018-07-01 15 0 0
5 c2 2018-07-01 5 0 0
6 c3 2018-07-01 5 0 0
7 c4 2018-07-12 5 0 0
8 c5 2018-07-01 5 0 0
9 c5 2018-07-01 0 10 0
10 c5 2018-07-01 0 0 10


要求出,每一个bh某一天内,A1、A2、A3均有值>0的bh记录,
如c1、c5满足 2018-07-01 A1有记录、A2有记录

只用分组select bh,rq from sellinfo group by bh,rq having count(id)>1不能满足要求
...全文
102 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
中国风 2018-07-12
MAX(SIGN(A1)) +MAX(SIGN(A2)) +MAX(SIGN(A3)) >=2
----------
满足有两列有值时改这个条件
回复
中国风 2018-07-12
C1?
同一天A5没有值,也计算成立?

写个例子,只有C5同一天,A1/A2/A3 都有值
use Tempdb
go
--> --> 中国风(Roy)生成測試數據

if not object_id(N'Tempdb..#sellinfo') is null
drop table #sellinfo
Go
Create table #sellinfo([ID] int,[bh] nvarchar(22),[rq] Date,[A1] int,[A2] int,[A3] int)
Insert #sellinfo
select 1,N'c1','2018-07-01',5,0,0 union all
select 2,N'c1','2018-07-01',0,10,0 union all
select 3,N'c1','2018-07-12',0,20,0 union all
select 4,N'c2','2018-07-01',15,0,0 union all
select 5,N'c2','2018-07-01',5,0,0 union all
select 6,N'c3','2018-07-01',5,0,0 union all
select 7,N'c4','2018-07-12',5,0,0 union all
select 8,N'c5','2018-07-01',5,0,0 union all
select 9,N'c5','2018-07-01',0,10,0 union all
select 10,N'c5','2018-07-01',0,0,10
Go
SELECT [bh]
, [rq]
FROM #sellinfo
GROUP BY [bh]
, [rq]
HAVING MAX(SIGN(A1)) +MAX(SIGN(A2)) +MAX(SIGN(A3)) =3;
/*
bh rq
c5 2018-07-01
*/
回复
chuting1 2018-07-12
高手!真正的高手
回复
二月十六 元老 2018-07-12
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] int,[bh] nvarchar(22),[rq] Date,[A1] int,[A2] int,[A3] int)
Insert #T
select 1,N'c1','2018-07-01',5,0,0 union all
select 2,N'c1','2018-07-01',0,10,0 union all
select 3,N'c1','2018-07-12',0,20,0 union all
select 4,N'c2','2018-07-01',15,0,0 union all
select 5,N'c2','2018-07-01',5,0,0 union all
select 6,N'c3','2018-07-01',5,0,0 union all
select 7,N'c4','2018-07-12',5,0,0 union all
select 8,N'c5','2018-07-01',5,0,0 union all
select 9,N'c5','2018-07-01',0,10,0 union all
select 10,N'c5','2018-07-01',0,0,10
Go
--测试数据结束
Select bh,rq from #T
GROUP BY bh,rq
HAVING SUM(
DISTINCT
CASE WHEN A1>0 THEN 1 ELSE 0 END )+SUM(
DISTINCT
CASE WHEN A2>0 THEN 1 ELSE 0 END )+SUM(
DISTINCT
CASE WHEN A3>0 THEN 1 ELSE 0 END )>1


回复
chuting1 2018-07-12
要求出,每一个bh某一天内,A1、A2、A3中至少两项均有值>0的bh记录,
如c1、c5满足 2018-07-01 A1有记录、A2有记录
回复
chuting1 2018-07-12
楼上正解,两种方法都可以
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2018-07-12 11:09
社区公告
暂无公告