当前位置: 代码迷 >> Sql Server >> 100分, 找到自身重复的行
  详细解决方案

100分, 找到自身重复的行

热度:54   发布时间:2016-04-24 09:39:44.0
100分, 找出自身重复的行.


  use TempTest 
  go   
  if OBJECT_ID ('Tb1') is not null drop table Tb1 
  Create Table Tb1  (
  colKey varchar(10) not null primary key ,
  col1 varchar(10) null,
  col2 varchar (10)  null
  ,col3 varchar (10)  null
  )
go


Insert into Tb1 
Select  'key1' , 'aa1' , 'C' , 'D'  union all 
Select  'key2' , 'aa2' , 'C' , 'D'  union all 
Select  'key3' , 'aa3' , 'D' , 'D'  union all 
Select  'key4' , 'aa4' , 'D' , 'D'  union all 
Select  'key5' , 'aa5' , 'C' , 'C'  union all 
Select  'key6' , 'aa6' , 'D' , 'C'  union all 
Select  'key7' , 'aa3' , 'D' , 'D'  union all 
Select  'key8' , 'aa4' , 'D' , 'C'  union all 
Select  'key9' , 'aa3' , 'D' , 'C'  union all 
Select  'key10' , 'aa10' , 'C' , 'D'  union all 
Select  'key11' , 'aa3' , 'D' , 'C'  union all 
Select  'key12' , 'aa12' , 'C' , 'D' 



SELECT * FROM [TempTest].[dbo].[Tb1] order by col1,col2,col3

--要求找出 col,col2 值相同 并且 col3 值为 'D' 的重复行



------解决思路----------------------
select a.* from tb1 a inner join (
Select  col1, col2, col3, count(0) from tb1
where  col3 = 'D'
group by col1, col2, col3
having count(0)  > 1)  b on a.col1 = b.col1 and a.col2 = b.col2 and a.col3 = b.col3

忘记加D条件了
------解决思路----------------------

 
WITH a1 AS

SELECT *,ROW_NUMBER()  OVER(PARTITION BY col1,col2 ORDER BY GETDATE()) re
FROM #Tb1 
WHERE col3='D'
)
,a2 AS
(
SELECT col1,col2
FROM a1
GROUP BY col1,col2
HAVING MAX(re)>1
)
SELECT a.*
FROM a1 a
JOIN a2 b ON a.col1=b.col1 AND a.col2=b.col2
ORDER BY col1,col2,col3

------解决思路----------------------
if OBJECT_ID ('Tb1') is not null drop table Tb1 
  Create Table Tb1  (
  colKey varchar(10) not null primary key ,
  col1 varchar(10) null,
  col2 varchar (10)  null
  ,col3 varchar (10)  null
  )
go


Insert into Tb1 
Select  'key1' , 'aa1' , 'C' , 'D'  union all 
Select  'key2' , 'aa2' , 'C' , 'D'  union all 
Select  'key3' , 'aa3' , 'D' , 'D'  union all 
Select  'key4' , 'aa4' , 'D' , 'D'  union all 
Select  'key5' , 'aa5' , 'C' , 'C'  union all 
Select  'key6' , 'aa6' , 'D' , 'C'  union all 
Select  'key7' , 'aa3' , 'D' , 'D'  union all 
Select  'key8' , 'aa4' , 'D' , 'C'  union all 
Select  'key9' , 'aa3' , 'D' , 'C'  union all 
Select  'key10' , 'aa10' , 'C' , 'D'  union all 
Select  'key11' , 'aa3' , 'D' , 'C'  union all 
Select  'key12' , 'aa12' , 'C' , 'D' 



--SELECT * FROM [Tb1] order by col1,col2,col3

--要求找出 col,col2 值相同 并且 col3 值为 'D' 的重复行

SELECT *  FROM TB1 AS T WHERE  EXISTS(SELECT 1 FROM TB1 WHERE COL1=T.COL1 AND COL2=T.COL2  AND colKey<>T.colKey AND COL3='D') AND COL3='D'

/*colKey     col1       col2       col3
---------- ---------- ---------- ----------
key3       aa3        D          D
key7       aa3        D          D

(2 行受影响)
*/

------解决思路----------------------
引用:
上面能否用在 C#编程中?  作为 数据源 datatable 给 dgv  ?
可以的,是出了什么问题吗?
SELECT * FROM(
SELECT *,COUNT(1)OVER(PARTITION BY col1)C FROM tb1
WHERE col3='D'
)T WHERE C>=2
  相关解决方案