表A.
字段有 一个 主键字段 c1 ,一个优先级字段 c2. 优先级目前取值为 (1,2,3,4,5).
表中记录是实时变化的,并不确定记录数,以及c2优先级取值的记录数
显示结果如下:
当存在有 优先级 为1 的结果时,只显示优先级为1 记录.
当不存在有优先及 为1 ,但是存在 优先级为 2,3,4,5,则按优先级升序排列显示优先级为2,3,4,5的记录数.请各位帮忙看下,谢谢!
字段有 一个 主键字段 c1 ,一个优先级字段 c2. 优先级目前取值为 (1,2,3,4,5).
表中记录是实时变化的,并不确定记录数,以及c2优先级取值的记录数
显示结果如下:
当存在有 优先级 为1 的结果时,只显示优先级为1 记录.
当不存在有优先及 为1 ,但是存在 优先级为 2,3,4,5,则按优先级升序排列显示优先级为2,3,4,5的记录数.请各位帮忙看下,谢谢!
表A.字段
only_unit_code varchar2(50) -- 唯一
PRIORITY varchar2(2) -- 优先级
AREA varchar2(2) -- 地市编码请编写一段sql,查询条件需接受一个地市参数. 即select * from A where area=&area;
查询结果如下:
1.当 地区编码不等于传入参数 且 存在 有 地区编码不等于传入参数条件下 优先级等于1 的结果
则 只显示 地区编码等于传入参数 且 优先级为 1 的结果
area<>&area and ( (select count(*) from A where priority = 1 and area<>&area) > 1)
2.当 地区编码不等于传入参数 且 不存在 地区编码不等于传入参数条件下 优先级等于1 的结果
则 显示 地区编码等于传入参数 按优先级排序后的结果
逻辑有点复杂,请各位高手耐心看看能否一句sql实现,谢谢!
SQL> select * from test;
ONLY_UNIT_CODE PRIORITY AREA_ID
-------------------- --------------------------------------- --------------------
GD_MB_PFILE_0001_10 3 10
GD_MB_PFILE_0003_10 3 10
GD_MB_PFILE_0005_10 3 10
GD_MB_PFILE_0007_10 5 10
GD_MB_PFILE_0009_10 5 10
GD_MB_PFILE_0011_10 5 10
GD_MB_PFILE_0013_10 2 10
GD_MB_PFILE_0015_10 1 10
GD_MB_PFILE_0017_10 2 10
GD_MB_PFILE_0019_10 2 10
GD_MB_PFILE_0021_10 1 10
GD_MB_PFILE_0023_10 1 10
GD_MB_PFILE_0025_10 1 10
GD_MB_PFILE_0027_10 1 20
GD_MB_PFILE_0029_10 1 11
GD_MB_PFILE_0031_10 1 10
GD_MB_PFILE_0032_10 1 15
GD_MB_PFILE_0034_10 1 16
GD_MB_PFILE_0035_10 1 10
GD_MB_PFILE_0037_10 1 10
ONLY_UNIT_CODE PRIORITY AREA_ID
-------------------- --------------------------------------- --------------------
GD_MB_PFILE_0039_10 1 10
GD_MB_PFILE_0040_10 1 10
GD_MB_PFILE_0041_10 1 10
GD_MB_PFILE_0043_10 1 10
GD_MB_PFILE_0045_10 1 10
GD_MB_PFILE_0047_10 1 10
GD_MB_PFILE_0049_10 1 10
GD_MB_PFILE_0051_10 1 10
GD_MB_PFILE_0052_10 1 10
GD_MB_PFILE_0054_10 1 10
GD_MB_PFILE_0055_10 1 10
GD_MB_PFILE_0056_10 1 10
GD_MB_PFILE_0057_10 1 10
GD_MB_PFILE_0058_10 1 10
GD_MB_PFILE_0059_10 1 10
GD_MB_PFILE_0060_10 1 10
GD_MB_PFILE_0061_10 1 10
GD_MB_PFILE_0062_10 1 10
GD_MB_PFILE_0063_10 1 10
GD_MB_PFILE_0064_10 1 10
GD_MB_PFILE_0067_10 1 10
ONLY_UNIT_CODE PRIORITY AREA_ID
-------------------- --------------------------------------- --------------------
GD_MB_PFILE_0069_10 1 10
GD_MB_PFILE_0071_10 1 10
GD_MB_PFILE_0072_10 1 10
GD_MB_PFILE_0073_10 1 10
GD_MB_PFILE_0075_10 1 10
GD_MB_PFILE_0076_10 1 10
GD_MB_PFILE_0079_10 1 10
GD_MB_PFILE_0082_10 1 10
GD_MB_PFILE_0083_10 1 10
GD_MB_PFILE_0084_10 1 10
GD_MB_PFILE_0085_10 1 10
GD_MB_PFILE_0086_10 1 10
GD_MB_PFILE_0087_10 1 10
GD_MB_PFILE_0088_10 1 10
GD_MB_PFILE_0089_10 1 10
GD_MB_PFILE_0090_10 1 10
GD_MB_PFILE_0091_10 1 10
GD_MB_PFILE_0092_10 1 10
GD_MB_PFILE_0093_10 1 10
GD_MB_PFILE_0094_10 1 10
GD_MB_PFILE_0095_10 1 10
ONLY_UNIT_CODE PRIORITY AREA_ID
-------------------- --------------------------------------- --------------------
GD_MB_PFILE_0096_10 1 10
GD_MB_PFILE_0097_10 1 10
GD_MB_PFILE_0098_10 1 10
GD_MB_PFILE_0099_10 1 10
GD_MB_PFILE_0100_10 1 10
GD_MB_PFILE_0101_10 1 10
GD_MB_PFILE_0102_10 1 10
GD_MB_PFILE_0103_10 1 10
GD_MB_PFILE_0104_10 1 10
GD_MB_PFILE_0105_10 1 10
GD_MB_PFILE_0106_10 1 10
GD_MB_PFILE_0107_10 1 10
GD_MB_PFILE_0108_10 1 10
GD_MB_PFILE_0109_10 1 10
不能用存储过程 啊,必须得sql
select * from A where ((exists(
(select 1 from A where priority = 1 and area<>&area))
and priority = '1' ) or (not exists(
(select 1 from A where priority = 1 and area<>&area))))
and area=&area
order by priority
SELECT A.*,
CASE
WHEN A.PRIORITY <> 1 AND
(SELECT COUNT(*)
FROM TEST
WHERE AREA_ID <> '10'
AND PRIORITY = 1) = 0 THEN
'T'
WHEN A.Priority <> 1 AND (SELECT COUNT(*)
FROM TEST
WHERE AREA_ID <> '10'
AND PRIORITY = 1) > 0 THEN
'F'
ELSE
'T'
END flag
FROM TEST A ) x where x.flag='T' and x.area_id='10';