如何使用MSSQL提取连续两年为负数的记录

选择连续两年负值的记录.rar  想使用SQL 来实现?

微信图片_20220413154808.png

用户CKn4B8768 发布于 2022-4-13 15:48 (编辑于 2022-4-14 15:46)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
用户W4933403Lv5见习互助
发布于2022-4-13 16:14

image.png

=IF(COUNTIFS(B2:F2,"<0",C2:G2,"<0"),"是","否")

最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-4-13 15:51

题干问的MSSQL ,详情里面却是excel...................

  • Z4u3z1 Z4u3z1 回复 用户CKn4B8768(提问者) 数据库中原始数据就是你excel示例中的A8至G8?我说的是原始数据
    2022-04-13 15:55 
最佳回答
0
用户CKn4B8768Lv2见习互助
发布于2022-4-13 15:51
使用MSSQL来取,不知道如何取出来?
最佳回答
0
CD20160914Lv8专家互助
发布于2022-4-13 15:53(编辑于 2022-4-13 16:18)

选择连续两年负值的记录.rar

excel也是很简单的。。。加一个辅助列就可以了。。。再透视。。。

image.png

数据公式。。。

=IF(MAX(FREQUENCY(IF(B2:G2<0,COLUMN(B2:G2)),IF(B2:G2<0,,COLUMN(B2:G2))))>=2,"是","否")

最佳回答
0
shinger@126.comLv2见习互助
发布于2022-4-13 17:55(编辑于 2022-4-14 11:08)

MSSQL使用lag函数,可以取分组内的前一条记录大概就是这个样子:

;with t as (select *,lag(Year,1) over(partition by country order by year) as UpYearAmount from table )

select * from table a

  where exists (select 1 from t where t.country=a.country and t.Amount<0 and UpYearAmount <0)

判读本年和上年的值均小于0的记录

lag函数因为需要MSSQL版本支持,除了这种方法,也可以使用左关联来获取连续2年负数的记录

create table #Sales(产品 varchar(20),年度 int,销售额 int)

insert into #Sales(产品,年度,销售额)

select '手机',2018,-300

union all

select '手机',2019,-400

union all

select '手机',2020,600

union all

select '电脑',2018,800

union all

select '电脑',2019,200

union all

select '电脑',2020,300

select distinct a.产品 

   from #Sales a join #Sales b on a.产品=b.产品 and a.年度=b.年度-1

   where a.销售额<0 and b.销售额<0

  • 用户CKn4B8768 用户CKn4B8768(提问者) 试了,运行不出来
    2022-04-13 22:02 
  • 用户CKn4B8768 用户CKn4B8768(提问者) select bz1.* from import bz1 left join (SELECT Country,sum(a1*a2+a2*a3+a3*a4+a4*a5+a5*a6) 是否 FROM (select Country,(case when [2017] is null or [2017]<0 then 1 else 0 end ) a1 ,(case when [2018] is null or [2018]<0 then 1 else 0 end ) a2 ,(case when [2019] is null or [2019]<0 then 1 else 0 end ) a3,(case when [2020] is null or [2020]<0 then 1 else 0 end ) a4 ,(case when [2021] is null or [2021]<0 then 1 else 0 end ) a5,(case when [2022] is null or [2022]<0 then 1 else 0 end ) a6 from import) BB group by Country ) BZ on bz1.Country= bz.Country where bz.是否 <>0 晚上使用了一个比较长的SQL 可以查出来了
    2022-04-13 22:53 
  • 用户CKn4B8768 用户CKn4B8768(提问者) 使用 with as 公用表达式,我不理解这个逻辑
    2022-04-13 22:54 
  • shinger@126.com shinger@126.com 回复 用户CKn4B8768(提问者) lag函数好像要MSSQL2014还是2016版本才支持。你这种横向设计表列扩展性不好,除了用lag函数这种方式,也可以用左关联自身来判断的
    2022-04-14 10:47 
  • 4关注人数
  • 446浏览人数
  • 最后回答于:2022-4-14 15:46
    请选择关闭问题的原因
    确定 取消
    返回顶部