表A:id            省              市
1           河北             乐羊
2           新疆             乐羊
3           湖南             长沙
4           江西             南昌
5           广州             乐羊
6           云南             长沙
。。要求结果:id            省              市
1           河北             乐羊
2           新疆             乐羊
5           广州             乐羊
3           湖南             长沙
6           云南             长沙即:市名相同,省份不同的记录。

解决方案 »

  1.   

    ?Select * From A Order By 市, id
      

  2.   

    select * from A a where exists(select 1 from A b where b.市 = a.市)
      

  3.   

    select * from a a1
    where exists (
    select 1 from a
    where 省<>a.省 and 市=a.市
    )
      

  4.   

    select * from a a1
    where exists (
    select 1 from a
    where 省<>a1.省 and 市=a1.市
    )
    order by a1.市,id
      

  5.   

    select * from 表A  where 市 in 
    (select 市 from 表A group by 市 having count(市)>0)
      
      

  6.   


    Select A.* From A 
    Inner Join (Select 市, Min(id) As id From A Group By 市 Having Count(id) > 1) B
    On A.市 = B.市
    Order By B.id, A.id
      

  7.   

    開始看錯了,下面這個可以得到和樓主的要求完全一致的結果。Select A.* From A 
    Inner Join (Select 市, Min(id) As id From A Group By 市 Having Count(id) > 1) B
    On A.市 = B.市
    Order By B.id, A.id
      

  8.   

    --創建測試環境
    Create Table A
    (id Int,
     省 Nvarchar(20),
     市 Nvarchar(20))
    --插入數據
    Insert A Select 1,           N'河北',             N'乐羊'
    Union All Select 2,           N'新疆',             N'乐羊'
    Union All Select 3,           N'湖南',             N'长沙'
    Union All Select 4,           N'江西',             N'南昌'
    Union All Select 5,           N'广州',             N'乐羊'
    Union All Select 6,           N'云南',             N'长沙'
    GO
    --測試
    Select A.* From A 
    Inner Join (Select 市, Min(id) As id From A Group By 市 Having Count(id) > 1) B
    On A.市 = B.市
    Order By B.id, A.id
    GO
    --刪除測試環境
    Drop Table A
    --結果
    /*
    id 省 市
    1 河北 乐羊
    2 新疆 乐羊
    5 广州 乐羊
    3 湖南 长沙
    6 云南 长沙
    */
      

  9.   

    楼上的结果仍然不是我想要的,可能是我的例子没有表示清楚。有这样的情况:表A:id            省              市
    1           河北             乐羊
    2           新疆             乐羊
    3           湖南             长沙
    4           江西             南昌
    5           广州             乐羊
    6           云南             长沙
    7           云南             长沙
    8           江西             南昌
    9           河北             乐羊
    。。要求结果:id            省              市
    1           河北             乐羊
    2           新疆             乐羊
    5           广州             乐羊
    3           湖南             长沙
    6           云南             长沙
      

  10.   

    修改--測試
    Select Min(A.id) As id, A.省, A.市 From A 
    Inner Join (Select 市, Min(id) As id From A Group By 市 Having Count(Distinct 省) > 1) B
    On A.市 = B.市
    Group By A.省, A.市
    Order By Min(B.id), Min(A.id)
      

  11.   

    --創建測試環境
    Create Table A
    (id Int,
     省 Nvarchar(20),
     市 Nvarchar(20))
    --插入數據
    Insert A Select 1,           N'河北',             N'乐羊'
    Union All Select 2,           N'新疆',             N'乐羊'
    Union All Select 3,           N'湖南',             N'长沙'
    Union All Select 4,           N'江西',             N'南昌'
    Union All Select 5,           N'广州',             N'乐羊'
    Union All Select 6,           N'云南',             N'长沙'
    Union All Select 7,           N'云南',             N'长沙'
    Union All Select 8,           N'江西',             N'南昌'
    Union All Select 9,           N'河北',             N'乐羊'
    GO
    --測試
    Select Min(A.id) As id, A.省, A.市 From A 
    Inner Join (Select 市, Min(id) As id From A Group By 市 Having Count(Distinct 省) > 1) B
    On A.市 = B.市
    Group By A.省, A.市
    Order By Min(B.id), Min(A.id)
    GO
    --刪除測試環境
    Drop Table A
    --結果
    /*
    id 省 市
    1 河北 乐羊
    2 新疆 乐羊
    5 广州 乐羊
    3 湖南 长沙
    6 云南 长沙
    */