想从个table1中取出记录,条件是这样的,字段place表示地区,有省份或全国,还有时段time2,要对应白天、黑夜,或者是全天。顺序是这样的。
1、首先选取省份="江苏",且时段="白天"的记录
2、如果上一步没有记录,则选择省份="江苏",且时段="全天"的记录
3、如果上一步没有记录,则选择省份="全国",且时段="白天"的记录
4、如果上一步没有记录,则选择省份="全国",且时段="全天"的记录这种情况,如果按照笨方法,是要select 4次数据库的吧,我感觉这样有点浪费资源,求一个高效的语句。谢谢。
最终要给出一条记录的。
1、首先选取省份="江苏",且时段="白天"的记录
2、如果上一步没有记录,则选择省份="江苏",且时段="全天"的记录
3、如果上一步没有记录,则选择省份="全国",且时段="白天"的记录
4、如果上一步没有记录,则选择省份="全国",且时段="全天"的记录这种情况,如果按照笨方法,是要select 4次数据库的吧,我感觉这样有点浪费资源,求一个高效的语句。谢谢。
最终要给出一条记录的。
select
top 1 *
from
tb
order by
case when place='江苏' then 1 when place='全国' then 2 else 3 end,
case when time2='白天' then 1 when time2='全天' then 2 else 3 end,
newid()
测试结果即真理,楼主搞点测试数据测试一下就知道了。
你要取5条记录的话,就是 top 5
---try
order by case when 列='' then 1 else .... end
FROM table 1 a
INNER JOIN
(
SELECT idx1=1,state = '江苏', dRange = '白天',
UNION ALL
SELECT 2,'江苏','全天'
UNION ALL
SELECT 3,'全国','白天'
UNION ALL
SELECT 4,'全国','全天'
) b
ON a.state = b.state AND a.dRange = b.dRange
ORDER BY a.idx