SQL语句问题 面试题
发布网友
发布时间:2022-04-29 11:34
我来回答
共4个回答
热心网友
时间:2022-04-08 00:33
select d.科目代码 from
(select c.科目代码,sum(c.flag) as num from
(select b.科目代码,if(b.发生额>a.发生额 1,0) as flag from
(select 科目代码,发生额 from voucher where 科目代码='101')a --12条记录(1)
left join
(select 科目代码,发生额 from voucher where 科目代码<>'101')b --非101科目条数*12条记录(2)
on a.发生月份=b.发生月份)c --设个标志,如果发生额>101的同月发生额,为1,否自为0(3)
group by c.科目代码)d --对标志值分组累加(4)
where d.num=12 --如果累加值为12,说明该代码12个月的发生额都大于101同月发生额。(5)
记事本手写未经测试,有问题自己修改吧。
热心网友
时间:2022-04-08 01:51
select vs.科目代码
from
(select v.*,v1.发生额 as 发生额101,
case when v.发生额>v1.发生额 then 1 else 0 end as 比较
from Voucher v
left join Voucher v1 on v.发生月份=v1.发生月份 and v1.科目代码=101
where v.科目代码<>101 )vs
group by vs.科目代码
having sum(vs.比较)=count(vs.比较)
用科目代码(除101)联表查询当月的101
同时生成每个代杩与101的发生额比较,大于则为1,其他结果为0
然后按科目分组,因为题目条件是(每个月的发生额都要大于当月101),
所以sum(vs.比较)和count(vs.比较)两个统计数应当相等.
热心网友
时间:2022-04-08 03:26
如下应该没问题啦:
select distinct b.科目代码
from Voucher a, Voucher b
where a.科目代码 <> b.科目代码
and a.科目代码=101 and a.发生月份=b.发生月份 and b.发生额 > a.发生额;
热心网友
时间:2022-04-08 05:17
select * from Voucher where 发生额>(select 发生额 from Voucher where 科目代码=101)