在SQL Server表中查找重复项

时间:2014-05-28 19:05:43

标签: sql-server duplicate-data

我有一张桌子

+--------+--------+--------+--------+--------+
| Market | Sales1 | Sales2 | Sales3 | Sales4 |
+--------+--------+--------+--------+--------+
|     68 |      1 |      2 |      3 |      4 |
|    630 |      5 |      3 |      7 |      8 |
|    190 |      9 |     10 |     11 |     12 |
+--------+--------+--------+--------+--------+

我想在所有上述销售字段中找到重复项。在上面的示例中,市场68和630具有重复的Sales值,即3。

我的问题是显示市场有重复销售。

2 个答案:

答案 0 :(得分:0)

假设数据量不是那么大, 制作一个新的临时表来连接所有数据:

Sales 
Market

然后选择按销售分组,然后选择大于1的分组:

select Max(Sales), Count(*) as Qty 
from #temporary 
group by Sales

答案 1 :(得分:0)

如果您对表进行规范化,这个问题将非常简单。

然后您只需要列Market | Sales,或者如果1,2,3,4很重要,您可以拥有Market | Quarter | Sales(或其他相关列名称)。

鉴于您的表格不是这种格式,您可以使用CTE进行格式化,然后从中进行选择,例如

WITH cte AS (
    SELECT Market, Sales1 AS Sales FROM MarketSales
    UNION ALL 
    SELECT Market, Sales2 FROM MarketSales
    UNION ALL 
    SELECT Market, Sales3 FROM MarketSales
    UNION ALL 
    SELECT Market, Sales2 FROM MarketSales
)
SELECT a.Market
      ,b.Market
FROM cte a
INNER JOIN cte b ON b.Market > a.Market
WHERE a.Sales = b.Sales

您可以在没有CTE的情况下轻松完成此操作,只需要一个比较Sales列的所有组合的大型where子句。