我有一张桌子
+--------+--------+--------+--------+--------+
| Market | Sales1 | Sales2 | Sales3 | Sales4 |
+--------+--------+--------+--------+--------+
| 68 | 1 | 2 | 3 | 4 |
| 630 | 5 | 3 | 7 | 8 |
| 190 | 9 | 10 | 11 | 12 |
+--------+--------+--------+--------+--------+
我想在所有上述销售字段中找到重复项。在上面的示例中,市场68和630具有重复的Sales值,即3。
我的问题是显示市场有重复销售。
答案 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子句。