2

我有一张这样的桌子:

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 比较两列

像这样的东西:

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

不知道行不行?我怎样才能加入表?

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

谢谢

4

2 回答 2

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;
于 2012-11-21T05:39:54.220 回答
1

这将向您显示有问题的状态/代码组合:

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

您可以进一步处理以查找每个速率有多少行。例如使用 CTE,但我将其作为练习留给读者。

于 2012-11-21T05:52:02.997 回答