table : ----------------------- 
列1    列2      列3 
----------------------- 
bb    cc        20 
----------------------- 
cc    bb        20 
----------------------- 
ff    hh        9 
----------------------- 
hh    ff        9 
----------------------- 想要得到的结果: 
----------------------- 
列1    列2      列3 
----------------------- 
bb    cc        20 
----------------------- 
ff    hh        9
----------------------- cc  bb  ,hh  ff  作为重复数据去除。如何写 sql 语句?
如果可以,请分别写出SQL SERVER和Oracle语句如何写(ORACLE好像可以直接用一条语句实现)

解决方案 »

  1.   

    ---------------------------------
    --  Author: liangCK 小梁
    --  Date  : 2008-11-24 17:03:59
    ---------------------------------
     
    --> 生成测试数据: @T
    DECLARE @T TABLE (列1 VARCHAR(2),列2 VARCHAR(2),列3 INT)
    INSERT INTO @T
    SELECT 'bb','cc',20 UNION ALL
    SELECT 'cc','bb',20 UNION ALL
    SELECT 'ff','hh',9 UNION ALL
    SELECT 'hh','ff',9--SQL查询如下:SELECT DISTINCT *
    FROM(
        SELECT 
            CASE WHEN 列1>列2 THEN 列1 ELSE 列2 END AS 列1,
            CASE WHEN 列1>列2 THEN 列2 ELSE 列1 END AS 列2,
             列3
        FROM @T
    ) AS T/*
    列1   列2   列3
    ---- ---- -----------
    cc   bb   20
    hh   ff   9(2 行受影响)
    */
      

  2.   

    ---------------------------------
    --  Author: liangCK 小梁
    --  Date  : 2008-11-24 17:03:59
    ---------------------------------
     
    --> 生成测试数据: @T
    DECLARE @T TABLE (列1 VARCHAR(2),列2 VARCHAR(2),列3 INT)
    INSERT INTO @T
    SELECT 'bb','cc',20 UNION ALL
    SELECT 'cc','bb',20 UNION ALL
    SELECT 'ff','hh',9 UNION ALL
    SELECT 'hh','ff',9--SQL查询如下:SELECT DISTINCT *
    FROM(
        SELECT 
            CASE WHEN 列1<列2 THEN 列1 ELSE 列2 END AS 列1,
            CASE WHEN 列1<列2 THEN 列2 ELSE 列1 END AS 列2,
             列3
        FROM @T
    ) AS T/*
    列1   列2   列3
    ---- ---- -----------
    bb   cc   20
    ff   hh   9(2 行受影响)
    */
      

  3.   

    select distinct * from (
    select case when 列1<列2 then 列1 else 列2 end as 列1,
        case when 列1<列2 then 列2 else 列1 end as 列2,
        列3
       from [table] ) as a
      

  4.   

    如果你始终有列值是相同的就按那组分组咯
    select * from table group by 列3
      

  5.   

    select *
    from @t a
    where  列2 > 列1