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

解决方案 »

  1.   

    用存储过程+while循环来做吧,因为你这个涉及到插入多条的问题
      

  2.   

    select top 4 *
    from tab
    order by case when cityid = 2001 then 0 else 1 end,id
      

  3.   

    select top 4 * from tb order by case when cityID=2001 then 0 else 1 end
      

  4.   

    select top 4 * from tb order by case when cityID= 2001 then 0 else 1 end
      

  5.   

    select top 4 *
    from tab
    order by case when cityid = 2001 then 0 else 1 end,newid()
      

  6.   


    select top 4 * from 表A 
    order by (case when cityID=2001 then 0 else 1 end)
      

  7.   

    select top 4 * from tb
    order by (case when cityID>=2001 then city else 2001*2-city end)
      

  8.   

    可能我自己也有些混乱吧,问题没有描述的很清楚。
    现在我有两个解决方案一:
      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