如何比较同一表中的列记录?
如何比较同一表中的列记录?
这是我的测试表数据:\n测试\n
ID 名称 付款日期 费用 金额 1 银行A 2016-04-01 100 20000 2 银行B 2016-04-02 200 10000 3 银行A 2016-04-03 100 20000 4 银行B 2016-04-04 300 20000
\n我想比较每个数据记录的名称、费用和金额字段,看看是否有相同的值。如果它们有相同的值,我想在这些记录上标记一些像\'Y\'的东西。以下是预期的结果:\n
ID 名称 付款日期 费用 金额 有相同数据存在 1 银行A 2016-04-01 100 20000 Y 2 银行B 2016-04-02 200 10000 N 3 银行A 2016-04-03 100 20000 Y 4 银行B 2016-04-04 300 20000 N
\n我尝试了下面这两种方法。但我正在寻找其他解决方案,以便我可以选择最好的方法来完成我的工作。\n方法1.\n
select t.*, iif((select count(*) from testing where name=t.name and fee=t.fee and amt=t.amt)=1,'N','Y') as 有相同数据存在 from testing t
\n方法2.\n
select t.*, case when ((b.名称 = t.名称) and (b.费用 = t.费用) and (b.金额 = t.金额)) then 'Y' else 'N' end as 有相同数据存在 from testing t left join ( select 名称, 费用, 金额 from testing Group By 名称, 费用, 金额 Having count(*)>1 ) as b on b.名称 = t.名称 and b.费用 = t.费用 and b.金额 = t.金额
这是另一种方法,但我认为您需要对数据运行测试以找出哪种方法最好:
SELECT t.*, CASE WHEN EXISTS( SELECT * FROM testing WHERE id <> t.id AND Name = t.Name AND Fee = t.Fee AND Amt = t.Amt ) THEN 'Y' ELSE 'N' END SameDataExistYN FROM testing t ;
哇!这个方法完美运行,比我以前的方法还要快。谢谢你。
原因:问题的出现可能是因为用户需要比较同一张表中的不同记录的列。
解决方法:通过使用上述给出的SQL查询语句,用户可以从同一张表中比较不同记录的列。该查询语句使用了CASE语句和EXISTS子查询。它首先选择了表中的所有列,并根据以下条件判断是否存在相同的数据:id不等于t.id,Name等于t.Name,Fee等于t.Fee,Amt等于t.Amt。如果满足这些条件,将返回'Y',否则返回'N'。通过执行这个查询,用户可以找出是否存在相同的数据,并将结果与原始数据一起返回。这种方法经过测试,效果良好且速度更快。
有时候,在同一张表中对比不同列的记录是非常有用的。这可能是为了找到重复的记录,或者为了比较不同列之间的差异。在这种情况下,我们可以使用SQL查询来实现这一目的。
一个用户在Stack Overflow上提出了一个关于如何比较同一张表中的列的记录的问题。他在问题中提到了一个链接,该链接是关于如何选择某些字段上的重复记录的。
为了解决这个问题,我们可以使用SELECT语句和GROUP BY子句来比较同一张表中不同列的记录。下面是解决这个问题的步骤:
1. 确定需要比较的列。在这种情况下,我们需要比较的是同一张表中的不同列。
2. 使用SELECT语句从表中选择需要比较的列。例如,SELECT column1, column2 FROM table_name。
3. 使用GROUP BY子句将结果按照需要比较的列进行分组。例如,GROUP BY column1, column2。
4. 使用HAVING子句选择满足特定条件的记录。例如,HAVING COUNT(*) > 1可以选择有重复的记录。
5. 运行查询并查看结果。这将显示具有重复值的记录。
在上述解决方法中,我们使用SELECT语句选择需要比较的列,并使用GROUP BY子句对结果进行分组。然后,我们使用HAVING子句选择满足特定条件的记录。最后,我们运行查询并查看结果。这样,我们就可以比较同一张表中不同列的记录了。
总结起来,要比较同一张表中不同列的记录,我们可以使用SELECT语句、GROUP BY子句和HAVING子句来实现。这样,我们可以找到重复的记录或者比较不同列之间的差异。