SQL查询以查找列是否存在不同的值

时间:2009-03-25 19:53:34

标签: sql

我有一个包含三列的临时表 pay_id, id_client_grp, id_user

基本上我想确保这个表应该包含所有具有相同客户端组和相同id_user的行,如果不是我想知道哪个pay_id是罪魁祸首并向用户抛出错误。

有人可以帮我查询。

谢谢,

仙人

5 个答案:

答案 0 :(得分:1)

如果您希望所有行对于某些列具有相同的值(您的问题对我来说并不完全清楚,因为您希望它们是相同的)

你知道进入WHICH pay_id,id_client_grp所有的行应该是什么?或者你不在乎,只要它们都一样吗?
如果您知道要查找的值,只需测试未设置为所需值的行

Select distinct id_user
From tempTable
Where pay_id <> @PayIdValue 
  Or id_client_grp <> @ClientGroupIDValue

如果你不在乎,并且只是希望它们都是相同的,而它们不是,那么你需要指定多个值集中的哪一个是你所说的“罪魁祸首”。

如果您想要回答其他一些问题。请更清楚地解释......

根据你的评论,然后,确定是否有多个id_client_grp,pay_id

Select Count(Distinct id_client_grp, pay_id)
From tempTable

如果这= 1,则每个记录对这两个字段具有相同的值....任何其他值表示三个是表中不止一组不同的值。

答案 1 :(得分:1)

当你说'罪魁祸首'时,我认为你的意思是pay_id(s)与其他人不同,假设有多数人。

问题是,一旦您的SELECT COUNT(DISTINCT id_client_grp,id_user)返回&gt;,所有pay_id都可能成为罪魁祸首。 1记录,如果有相对均匀的分布。很难为这种情况编程,因为您需要确定究竟是多数人。

您最好的选择是返回这3个字段的所有不同组合,然后根据您的业务逻辑决定从那里开始。

答案 2 :(得分:1)

所以可以这样问这个问题:

  

如果我想在我的表上添加三个列的唯一索引:客户端组,ID用户,付费ID,识别那些打破了我们为客户端组和id用户提供非唯一付款ID的唯一条件的索引? ?

select a.id_client_grp, a.id_user, a.pay_id , a.count from ( 
/* this should return 1 row per client group and user, */ 
/* if the pay id is the same for all */
 select id_client_grp, id_user, pay_id, count(1) as count
from table t
group by id_client_grp, id_user ) a
group by a.id_client_grp, a.id_user
/* if we have more than one row per client group and user, then we have a dupe, so report them all */
having count (1)  > 1

答案 3 :(得分:0)

    SELECT DISTINCT p.pay_id,
        t.[count]
FROM rishi_table p
INNER JOIN ( SELECT id_client_grp, id_user, COUNT(*) As 'count'
                FROM rishi_table
                GROUP BY id_client_grp, id_user
                HAVING COUNT(*) > 1 ) t
    ON p.id_client_grp = t.id_client_grp AND p.id_user = t.id_user

基本上创建一个带有欺骗的集合,并将其反弹到主表以获取您的违规列表。

答案 4 :(得分:-1)

SELECT DISTINCT id_client_grp,id_user

应该让你做类似

的事情

IF @@ ROWCOUNT&gt; 1那么

...

或者可能是SELECT COUNT(DISTINCT id_client_grp,id_user)......

但是,它的可用性和正确的语法更依赖于供应商。