首页 > 解决方案 > SQL:识别列中是否有多个(不重复)

问题描述

我目前正在努力确定使用 SSMS 识别数据中某些模式的可能性。我希望识别在同一列中包含多个条目(x 2、x 3 或 x*4)的行。

我现在真的不知道如何开始我的“在哪里”声明。

SELECT  [numbers], [product_ID]
FROM [db].[dbo].[tablename]
WHERE [numbers] = numbers*2   

我的问题是,使用上面的代码,我显然只能识别零。

谷歌只能帮助我找到重复项,但我找不到识别多个值的方法......

我想要的结果是一个只包含彼此倍数的数字(链接到 product_IDs)的表

任何人都可以在这里帮助我吗?

标签: sqlsql-serverduplicates

解决方案


如果一列包含倍数,则所有都是最小非零值的倍数。为此,我假设这些值是正数或零。

因此,您可以使用窗口函数和模运算来确定是否属于这种情况:

select t.*
from (select t.*,
             min(case when number > 0 then number end) over () as min_number
      from t
     ) t
where number % min_number = 0 or min_number = 1;

如果您想知道所有数字是否符合此条件,请使用聚合:

select (case when min(number % min_number) = 0 then 'all multiples' else 'oops' end)
from (select t.*,
             min(case when number > 0 then number end) over () as min_number
      from t
     ) t

推荐阅读