a表
id time 
1  XXXX
2  XXXX
3  XXXXb表
id aid Disabled
1   2   1
2   1   0
3   1   0
现在要让a表根据b表排序,b表里有a表对应数据的且Disabled=0的排在前面

解决方案 »

  1.   

    select b.*
    from b join a on a.id=b.id
    order by Disabled 
      

  2.   

    try.
    SELECT T.* FROM a T JOIN b ON T.id=b.aid ORDER BY b.Disabled
      

  3.   

    没说清楚b表里只要Disabled=0的其他不要用来排序
      

  4.   

    CREATE TABLE a
    (
    id INT, 
    time  VARCHAR(20)
    )
    INSERT INTO a
    SELECT 
    1 ,'XXXX'  UNION ALL SELECT
    2 ,'XXXX'  UNION ALL SELECT
    3 ,'XXXX' 
    b表
    CREATE TABLE b
    (
    id INT,
    aid INT,
    Disabled INT
    )
    INSERT INTO b
    SELECT 
    1, 2, 1 UNION ALL SELECT
    2, 1, 0 UNION ALL SELECT
    3, 1, 0SELECT T.* FROM a T LEFT JOIN b ON(T.id=b.aid AND b.Disabled=0) ORDER BY ISNULL(b.Disabled,1),T.id DESC
    /*
    id          time
    ----------- --------------------
    1           XXXX
    1           XXXX
    3           XXXX
    2           XXXX(4 行受影响)
    */
      

  5.   

    select level=0,* from a where exists(select 1 from b where a.id=b.id and b.disabled=0)
    union all
    select level=1,* from a where not exists(select 1 from b where a.id=b.id and b.disabled=0)
    order by level,id asc
      

  6.   

    CREATE TABLE a
    (
    id INT, 
    time  VARCHAR(20)
    )
    INSERT INTO a
    SELECT 
    1 ,'XXXX'  UNION ALL SELECT
    2 ,'XXXX'  UNION ALL SELECT
    3 ,'XXXX' 
    b表
    CREATE TABLE b
    (
    id INT,
    aid INT,
    Disabled INT
    )
    INSERT INTO b
    SELECT 
    1, 2, 1 UNION ALL SELECT
    2, 1, 0 UNION ALL SELECT
    3, 1, 0select a.* from a 
    order by 
    case when exists(select 1 from b where b.aid = a.id and b.Disabled = 0) then 1 
         when exists(select 1 from b where b.aid = a.id ) then 2 
         else 3 
    end
    drop table a , b/*
    id          time                 
    ----------- -------------------- 
    1           XXXX
    2           XXXX
    3           XXXX(所影响的行数为 3 行)
    */
      

  7.   

    还是不是很清楚LZ的需求,如果按照B表Disabled=0的排序,那Disabled!=0的怎么算?,因为a表跟b表对应的,如果b表把Disabled!=0的去掉,那跟a表join的话,显然会少一个id=1的值,那对于这个LZ怎么算?
      

  8.   

    SELECT a.id,a.time,b.aid,b.Disabled FROM a INNER JOIN b ON a.id=b.id ORDER BY b.Disabled ASC
      

  9.   

    嗯,感觉LS的比较符合LZ的要求。。SELECT a.id,a.time FROM a INNER JOIN b ON a.id=b.id ORDER BY b.Disabled ASC