求一sql语句,高手请进

rtno1979 2011-05-31 12:01:10
有一表中数据:

序号 风险级别
1 高
2 中
3 低
4 高
... ...
如何判断表中是否存在有
1:高 中 低三个风险的记录都存在。
2:风险为 (高风险 中风险)、或者(高风险 低风险)、或者(中风险 低风险)的记录存在。
3:风险只有 高风险 、或者只有中风险 、或者只有低风险的记录。
...全文
273 点赞 收藏 21
写回复
21 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hyena041 2011-08-22
select case sum( num) when 111 ....
from
(
select distinct( case 风险级别 when '高' then 100 when '中' then 10 when '低' 1 end ) num from 表
)
比较懒,就这样写一个想法把,嵌套一层 + 位计算看结果
回复
r1600413363 2011-08-17
顶 ~!~!~!~!
回复
fulank 2011-08-12
学习了。。。看来以后要多逛逛SQL版
回复
晓蛋 2011-07-18
[Quote=引用 15 楼 metalwmz 的回复:]
引用 1 楼 flysql 的回复:
SQL code
select count(distinct 风险级别) as cnt from tb

1: cnt=3
2: cnt=2
3: cnt=1


感觉比较贴切

select case COUNT(distinct 风险级别)

when 3 then '三个风险的记录都存在'
when 2 t……
[/Quote]
语句不对吧 以十楼的数据为例 应该是 select C1,count(distinct 风险级别) as cnt from tb group by C1 这样才会得到123的数据
回复
aspfeng9527 2011-07-15
典型的问题问的不清楚,楼主要多动脑筋把问题说清楚,OK?
回复
metalwmz 2011-07-08
[Quote=引用 1 楼 flysql 的回复:]
SQL code
select count(distinct 风险级别) as cnt from tb

1: cnt=3
2: cnt=2
3: cnt=1
[/Quote]

感觉比较贴切

select case COUNT(distinct 风险级别)

when 3 then '三个风险的记录都存在'
when 2 then '三个风险存在两个'
when 1 then '三个风险存在一个'
when 0 then '三个风险均不存在'
end

FROM from tb

回复
xyz822 2011-06-21
条件不固定的发上来参考下,我发的情况是比较简单的,只存在一个判断列C1,但是复杂情况可以使用组合列的方式
回复
yanglinqiang 2011-06-21
我也遇到同样问题,正在思考解决办法,比你的复杂点,后面的条件不固定
回复
rdsa198 2011-06-21
xxl
回复
xyz822 2011-06-21
最后那段sql请忽略,贴错了
回复
xyz822 2011-06-21
问题问的不清,我的理解是针对某字段C1,值为A的记录例如,存在3条记录,风险级别分别为高,中,低,或者少于3条记录情况,那你问的问题才有意义,不然,下面的一段就解决你全部的问题了

SELECT [风险级别],COUNT(1) FROM TB GROUP BY [风险级别]

我假设你问题的具体数据为以下情况:
风险级别 C1
高 A
中 A
低 A
高 B
低 B
中 C
低 C
低 D

解决办法:
SELECT C1,SUM([风险级别]) FROM
(SELECT C1,(CASE [风险级别] WHEN N'高' THEN 1 WHEN N'中' THEN 0.5 WHEN N'低' THEN 0.25 END) AS [风险级别]
FROM T_B) T1
GROUP BY C1
结果集:
C1 [风险级别]
A 1.75
B 1.25
C 0.75
D 0.25

分析
当[风险级别]=1.75时,说明针对记录A高中低都存在
当[风险级别]=1.25时,说明针对记录B高低存在
当[风险级别]=0.75时,说明针对记录C中低存在
当[风险级别]=0.25时,说明针对记录D只有低存在
其他依次类推


SELECT B,SUM(A)
FROM
(SELECT B,(CASE A WHEN 'A' THEN 1 WHEN 'B' THEN 2 WHEN 'C' THEN 4 END) AS A
FROM T_B) T1
GROUP BY B
回复
lvoers 2011-06-15
一条SQL能写楼猪的三个查询条件吗?。
回复
pumaadamsjack 2011-06-15
[Quote=引用 4 楼 yubofighting 的回复:]
引用 2 楼 fredrickhu 的回复:
SQL code
if exists(select 风险级别 from tb where 风险级别='高' and 风险级别='中' and 风险级别='低' group by 风险级别 having count(1)>=1)

+
[/Quote]

应该用or吧??

否则查不出来任何记录啊
回复
yanweijie0317 2011-06-15
满足第一个和第二个的完全不会
回复
yanweijie0317 2011-06-15
满足第三个条件的:
select * from tb where 序号 in (select 序号 from tb group by 序号 having (count(序号) = 1)) and 风险级别 in ('高','中','低');
回复
yanweijie0317 2011-06-15
[Quote=引用 5 楼 pumaadamsjack 的回复:]

引用 4 楼 yubofighting 的回复:
引用 2 楼 fredrickhu 的回复:
SQL code
if exists(select 风险级别 from tb where 风险级别='高' and 风险级别='中' and 风险级别='低' group by 风险级别 having count(1)>=1)

+


应该用or吧??

否则查不出来任何记录啊
……
[/Quote]

改成or,并且不用加group by having ,只符合第三个条件
回复
yubofighting 2011-06-08
[Quote=引用 2 楼 fredrickhu 的回复:]
SQL code
if exists(select 风险级别 from tb where 风险级别='高' and 风险级别='中' and 风险级别='低' group by 风险级别 having count(1)>=1)
[/Quote]
+
回复
xumeng929 2011-06-08

hao
回复
--小F-- 2011-05-31
if exists(select 风险级别  from tb where 风险级别='高' and 风险级别='中' and 风险级别='低' group by 风险级别 having count(1)>=1)
回复
FlySQL 2011-05-31
select count(distinct 风险级别) as cnt from tb

1: cnt=3
2: cnt=2
3: cnt=1
回复
相关推荐
发帖
community_281
创建于2021-05-27

252

社区成员

申请成为版主
帖子事件
创建了帖子
2011-05-31 12:01
社区公告
暂无公告