在SQL中操纵

时间:2015-03-12 10:07:41

标签: sql-server

我有一个查询,我在使用SelfJoin检查表中的重复记录。

Table1:
column1 column2 column3
data1   data2    data3
data1   data2    data3

我写了下面的查询,在上述情况下工作正常,并给出了所需的结果。

SELECT *
FROM table1(nolock) A
INNER JOIN
  (SELECT column1,
          column2,
          column3
   FROM table1(nolock)   
   GROUP BY column1,
            column2,
            column3
            HAVING count(1) > 1) B ON A.column1 = B.column1
AND A.column2 = B.column2
AND A.column3 = B.column3

但我的另一种情况就像一个列值包含为" ALL"应该被视为与其他数据相同。

Table1:
column1 column2 column3
data1   data2    ALL
data1   data2    data3

在上表中,column3有一个值为" ALL"。在这种情况下,我也想显示重复的记录。 如果其中一个列值为" ALL",请帮我修改上面的SQL以显示重复记录。 提前致谢

1 个答案:

答案 0 :(得分:0)

你是说这个吗?

SELECT  t1.column1,
        t1.column2,
        t1.column3
FROM    table1 t1 join table2 t2 
        on  (t1.column1 = 'all' or t2.column1 = 'all' or t1.column1 = t2.column1) and
            (t1.column2 = 'all' or t2.column2 = 'all' or t1.column2 = t2.column2) and
            (t1.column3 = 'all' or t2.column3 = 'all' or t1.column3 = t2.column3)
group by t1.column1,
        t1.column2,
        t1.column3
having count(*) > 1