删除查询中两列的重复项

时间:2014-10-30 21:41:51

标签: sql-server

我有一个select *查询,它提供了很多行和很多结果列。当给出与另一列B相同的值时,我有一个问题是一列A的重复,我想只包括其中一列。

基本上我有一个专栏告诉我" name"对象和另一个告诉我"数字"。有时我有一个对象" name"对于给定对象有多个条目" number"。我只想要不同的数字"在一个"名称"但我希望查询在这是真的时给出整个表,而不仅仅是这两列。

Name Number ColumnC ColumnD

Bob    1      93      12

Bob    2      432     546

Bob    3      443     76

上面这个例子很好

Name Number ColumnC ColumnD

Bob    1      93      12

Bob    2      432     546

Bill   1      443     76

Bill   2      54      1856

上面这个例子很好

Name Number ColumnC ColumnD

Bob    1      93      12

Bob    2      432     546

Bob    2      209     17

上面这个例子不太好,我只想要其中一个Bob 2。

4 个答案:

答案 0 :(得分:1)

如果您使用的是SQL 2005或更高版本,请尝试使用它:

With ranked_records AS
(
   select *, 
    ROW_NUMBER() OVER(Partition By name, number  Order By name) [ranked] 
    from MyTable
)
select * from ranked_records
where ranked = 1

答案 1 :(得分:0)

使用公用表表达式(CTE)和ROW_NUMBER OVER PARTITION语法如下:

WITH
  CTE AS
  (
    SELECT
      *,
      ROW_NUMBER() OVER (PARTITION BY Name, Number ORDER BY Name, Number) AS R
    FROM
      dbo.ATable
  )      
  SELECT 
    * 
  FROM 
    CTE 
  WHERE
    R = 1

答案 2 :(得分:0)

如果您只想要姓名和号码,那么

SELECT DISTINCT Name, Number FROM Table1

如果你想知道每个中有多少,那么

SELECT Name, Number, COUNT(*) FROM Table1 GROUP BY Name, Number

答案 3 :(得分:0)

使用

CTE AS

SELECT
  *,
  ROW_NUMBER() OVER (PARTITION BY Plant, BatchNumber ORDER BY Plant, BatchNumber) AS R
FROM dbo.StatisticalReports WHERE dbo.StatisticalReports. \!"FermBatchStartTime\!" >= DATEADD(d,-90, getdate())

选择

* 

FROM

CTE 

WHERE

R = 1

ORDER BY dbo.StatisticalReports.Plant,dbo.StatisticalReports.FermBatchStartTime