Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:如何查找重复的行值_Sql_Sql Server - Fatal编程技术网

SQL Server:如何查找重复的行值

SQL Server:如何查找重复的行值,sql,sql-server,Sql,Sql Server,我想找到一个重复的数字超过4行的值 如果你必须找到一个重复四次以上的数字,而不是在其他数字的组合中重复四次以上 此表为test2: num1 num2 num3 num4 num5 numb6 -------------------------------------- 1 1 1 2 3 4 1 1 1 1 3 4 1 2 3 4 5 6 1

我想找到一个重复的数字超过4行的值

如果你必须找到一个重复四次以上的数字,而不是在其他数字的组合中重复四次以上

此表为test2:

num1   num2  num3  num4  num5  numb6
--------------------------------------
 1      1     1     2     3      4
 1      1     1     1     3      4
 1      2     3     4     5      6
 1      2     2     1     4      5
我的SQL查询:

-- CTE
;WITH TEMP(num1, num2, num3, num4, num5, num6) AS 
(
    SELECT 
        RIGHT(num1) AS num1,
        RIGHT(num2) AS num2,
        RIGHT(num3) AS num3,
        RIGHT(num4) AS num4,
        RIGHT(num5) AS num5,
        RIGHT(num6) AS num6
    FROM 
        test2   
)
-- select duplicate number
SELECT 
    num1, num2, num3,
    num4, num5, num6,
    COUNT (CASE 
             WHEN num1 IN (num2, num3, num4, num5, num6)
                THEN 1
          END) +
    COUNT (CASE
             WHEN num2 IN (num3, num4, num5, num6)
                THEN 1
           END) + 
    COUNT (CASE
             WHEN num3 IN (num4, num5, num6)
                THEN 1
           END) +
    COUNT (CASE
             WHEN num4 IN (num5, num6)
                THEN 1
           END) +
    COUNT (CASE
             WHEN num5IN (num6)
                THEN 1
           END) AS countNum
FROM 
    TEMP
GROUP BY 
    num1, num2, num3, num4, num5, num6
我得到的结果如下:

num1   num2  num3  num4  num5  numb6  countNum
----------------------------------------------
 1      1     1     1     3      4       4
 1      2     2     1     4      5       4
但是我需要得到这个:

num1   num2  num3  num4  num5  numb6  countNum
----------------------------------------------
 1      1     1     1     3      4        4
或者我需要数据

num1   num2  num3  num4  num5  numb6
------------------------------------
 1      1     1     1     3      4

您可以尝试以下解决方案:

;with temp_data as (

select  1  as num1 ,    1 as num2 ,    1 as num3 ,    2  as num4 ,   3  as num5 ,    4  as num6 union all
select  1  as num1 ,    1 as num2 ,    1 as num3 ,    1  as num4 ,   3  as num5 ,    4  as num6 union all
select  2  as num1 ,    2 as num2 ,    2 as num3 ,    3  as num4 ,   2  as num5 ,    6  as num6 
)
SELECT * 
FROM temp_data
where 3=(CASE WHEN num1=num2 THEN 1 ELSE 0 END)+
(CASE WHEN num1=num3 THEN 1 ELSE 0 END)+
(CASE WHEN num1=num4 THEN 1 ELSE 0 END)+
(CASE WHEN num1=num5 THEN 1 ELSE 0 END)+
(CASE WHEN num1=num6 THEN 1 ELSE 0 END)
OR
3=(CASE WHEN num2=num1 THEN 1 ELSE 0 END)+
(CASE WHEN num2=num3 THEN 1 ELSE 0 END)+
(CASE WHEN num2=num4 THEN 1 ELSE 0 END)+
(CASE WHEN num2=num5 THEN 1 ELSE 0 END)+
(CASE WHEN num2=num6 THEN 1 ELSE 0 END)
OR
3=(CASE WHEN num3=num1 THEN 1 ELSE 0 END)+
(CASE WHEN num3=num2 THEN 1 ELSE 0 END)+
(CASE WHEN num3=num4 THEN 1 ELSE 0 END)+
(CASE WHEN num3=num5 THEN 1 ELSE 0 END)+
(CASE WHEN num3=num6 THEN 1 ELSE 0 END)
OR
3=(CASE WHEN num4=num1 THEN 1 ELSE 0 END)+
(CASE WHEN num4=num3 THEN 1 ELSE 0 END)+
(CASE WHEN num4=num2 THEN 1 ELSE 0 END)+
(CASE WHEN num4=num5 THEN 1 ELSE 0 END)+
(CASE WHEN num4=num6 THEN 1 ELSE 0 END)
OR
3=(CASE WHEN num5=num1 THEN 1 ELSE 0 END)+
(CASE WHEN num5=num2 THEN 1 ELSE 0 END)+
(CASE WHEN num5=num4 THEN 1 ELSE 0 END)+
(CASE WHEN num5=num3 THEN 1 ELSE 0 END)+
(CASE WHEN num5=num6 THEN 1 ELSE 0 END)
OR
3=(CASE WHEN num6=num1 THEN 1 ELSE 0 END)+
(CASE WHEN num6=num2 THEN 1 ELSE 0 END)+
(CASE WHEN num6=num4 THEN 1 ELSE 0 END)+
(CASE WHEN num6=num3 THEN 1 ELSE 0 END)+
(CASE WHEN num6=num5 THEN 1 ELSE 0 END)
;
输出:

num1    num2    num3    num4    num5    num6
1        1       1       1       3      4
2        2       2       3       2      6

使用以下代码:这可能会帮助您

select num1,num2,num3,num5 from dup
group by num1,num2,num3,num5
having count(num1)>1 and count(num2)>1 and count(num3)>1 and count(num5)>1

使用
应用

select t.*, v.cnt
from t cross apply
     (select top (1) num, count(*) as cnt
      from (values (num1), (num2), (num3), (num4), (num5), (num6)
           ) v(num)
      group by num
      order by count(*) desc
     ) v
where v.cnt >= 4;

这不仅比大量的
case
表达式更不容易出错。它甚至可以有更好的性能。

有固定的6列??哪些列?num1,num2,num3,num4,num5,num6?到目前为止你都试过什么?添加您当前的sql查询。这六列是固定的。@seungyong。“这比必要的要复杂得多。”戈登·林诺夫我也这么认为。我想知道一个更简单的方法。我得到消息“无法绑定多部分标识符”v.cnt。“我将“where num>4”更改为“where cnt>4”,我可以得到我想要的值。