表 A 有 三个字段 ID,Name,cityID 假设 查询条件为 cityID= 2001 优先调取该城市的资源,如果没有4个则用其他城市的补齐四个

soulkiss 2011-10-24 04:45:31
表 A 有 三个字段 ID,Name,cityID
假设 查询条件为 cityID= 2001
优先调取该城市的资源,如果没有4个则用其他城市的补齐四个

有没有简单的SQL 实现啊
...全文
177 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
soulkiss 2011-10-24
  • 打赏
  • 举报
回复
。。。可能我自己也有些混乱吧,问题没有描述的很清楚。
现在我有两个解决方案

一:
SELECT NAME
FROM A
WHERE CityId = 2001
--SELECT recrowcount=@@ROWCOUNT;
IF @@ROWCOUNT >4
SELECT TOP 4 Name
FROM A cpgb
WITH (NOLOCK)
WHERE CityId = 2001
ELSE
SELECT TOP 4 Name
FROM
(SELECT Name
FROM A
WHERE CityId = 2001
UNION
SELECT top 4 Name
FROM
A
WHERE CityId <> 221
) CG

这样再加上 业务的条件的话,会很复杂。。。
二:逻辑在后台代码中判断
先查询出 SELECT top 4 Name
FROM A
WHERE CityId = 2001
判断 结果的行数 rowCount ,如果小于4
则 查询 SELECT top (4-rowCount) Name
FROM
A
WHERE CityId <> 221
然后拼凑dt

-晴天 2011-10-24
  • 打赏
  • 举报
回复
select top 4 * from tb
order by (case when cityID>=2001 then city else 2001*2-city end)
唐诗三百首 2011-10-24
  • 打赏
  • 举报
回复

select top 4 * from 表A
order by (case when cityID=2001 then 0 else 1 end)
昵称被占用了 2011-10-24
  • 打赏
  • 举报
回复
select top 4 *
from tab
order by case when cityid = 2001 then 0 else 1 end,newid()
快溜 2011-10-24
  • 打赏
  • 举报
回复
select top 4 * from tb order by case when cityID= 2001 then 0 else 1 end
cd731107 2011-10-24
  • 打赏
  • 举报
回复
select top 4 * from tb order by case when cityID=2001 then 0 else 1 end
昵称被占用了 2011-10-24
  • 打赏
  • 举报
回复
select top 4 *
from tab
order by case when cityid = 2001 then 0 else 1 end,id
--小F-- 2011-10-24
  • 打赏
  • 举报
回复
什么4个不4个的 请给出测试数据和所需要的结果。
-晴天 2011-10-24
  • 打赏
  • 举报
回复
关键是,替补的城市有什么要求吗?
薇薇 2011-10-24
  • 打赏
  • 举报
回复
用存储过程+while循环来做吧,因为你这个涉及到插入多条的问题
zhangweitc123 2011-10-24
  • 打赏
  • 举报
回复
能详细点吗

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧