我怎样才能找到两列的标识

时间:2012-11-21 05:32:12

标签: sql

我有一张这样的表:

STATE      code     company   rate 
----------------------------------
TX          SD      1         0.5
TX          SD      2         0.5
TX          SD      3         0.7
TX          SD      4         0.5
..........

我需要验证在相同状态和相同代码下的速率是否相同。

我考虑自己加入表并获得1和rate2的比率,然后可以用比较两列的情况

这样的事情:

CASE WHEN COLUMN1 = COLUMN2 THEN '1' ELSE '0' END AS MyDesiredResult

我不知道它有效吗?我怎么能加入这个桌子?

基本上,我需要一份报告,看看在相同状态和相同代码下费率是否不同。

感谢

2 个答案:

答案 0 :(得分:1)

select *
from tbl t1
join tbl t2 using (state, code)
where t1.rate <> t2.rate
and t1.company < t2.company;

返回的每一行都会显示不匹配:如果没有不匹配,那么现在会返回行。最后一行只是阻止显示所有结果两次。

如果只有一个(state, code)组合有多个rate,则上述查询可能会返回大量行。为了只看到它们不同的不同费率的摘要,请改用:

select state, code, rate, count(*)
from tbl
group by state, code
having count(*) > 1;

答案 1 :(得分:1)

这将显示违规的州/代码组合:

select state, code, min(rate) min_rate, max(rate) max_rate
  from myTable
 group by state, code
having min(rate) != max(rate)

您可以进一步处理以查找每个费率有多少行。例如使用CTE,但我把它作为读者的练习。