为SQL重复查询返回0或1
与Teradata合作如果这很重要 我有一张类似这样的重复支票:为SQL重复查询返回0或1,sql,teradata,Sql,Teradata,与Teradata合作如果这很重要 我有一张类似这样的重复支票: SELECT ID, COUNT(*) FROM TBL_A HAVING COUNT(*) > 1 GROUP BY ID; 如果没有重复项,则返回0行,如果有重复项,则显示它们是什么。这很好,但我想要的是返回0(如果没有重复项)或1(如果找到重复项)。就这样 有什么想法吗?谢谢 我认为最简单的方法是一个案例: select (case when count(id) = count(distinct id) then 0
SELECT ID, COUNT(*)
FROM TBL_A
HAVING COUNT(*) > 1
GROUP BY ID;
如果没有重复项,则返回0行,如果有重复项,则显示它们是什么。这很好,但我想要的是返回0(如果没有重复项)或1(如果找到重复项)。就这样
有什么想法吗?谢谢 我认为最简单的方法是一个
案例
:
select (case when count(id) = count(distinct id) then 0 else 1 end)
from tbl_a;
注意:当id具有
NULL
值时,它将忽略id。如果需要考虑到这一点,修改查询很容易。我认为最简单的方法是使用案例:
select (case when count(id) = count(distinct id) then 0 else 1 end)
from tbl_a;
注意:当id具有NULL
值时,它将忽略id。如果您需要考虑到这一点,那么很容易修改查询。如果有多列键,则不能使用Gordon的apporach,因为聚合函数只能在单个列上工作
一种可能的解决方法是将这些列合并成这样一个列
COUNT(column1 || column2 || column3)
但这可能不是很有效
否则,您需要使用派生表添加另一个计数:
select case when count(*) = 0 then 0 else 1 end
from
(
SELECT column1, column2, column3, COUNT(*)
FROM TBL_A
GROUP BY 1,2,3
HAVING COUNT(*) > 1
) as dt
您应该比较资源使用情况,对于单列,应该类似于计数(不同ID)
,但对于多列,应该使用更少的CPU。如果有多列键,则不能使用Gordon的apporach作为聚合函数,因为聚合函数只能在单列上工作
一种可能的解决方法是将这些列合并成这样一个列
COUNT(column1 || column2 || column3)
但这可能不是很有效
否则,您需要使用派生表添加另一个计数:
select case when count(*) = 0 then 0 else 1 end
from
(
SELECT column1, column2, column3, COUNT(*)
FROM TBL_A
GROUP BY 1,2,3
HAVING COUNT(*) > 1
) as dt
您应该比较资源使用情况,对于单列,应该类似于
COUNT(DISTINCT ID)
,但是对于多列,应该减少CPU。对于每个ID,您需要这样的信息吗?@vkp这是出于自动测试目的而需要的另一个查询。我仍然有初始查询,可以运行该查询来显示重复项本身,但我需要一种方法来为此指定0和1。谢谢。每个id都需要这些信息吗?@vkp这是自动测试所需的另一个查询。我仍然有初始查询,可以运行该查询来显示重复项本身,但我需要一种方法来为此指定0和1。谢谢,行了,谢谢。这将用于自然键列,因此不会出现空值。我假设,如果在它们的键中有多个字段,我会像平常一样将这些字段附加到两个count()部分。谢谢。这将用于自然键列,因此不会出现空值。我假设如果它们的键中有多个字段,我会像平常一样将这些字段附加到两个count()部分。