我有一个包含三列的临时表 pay_id, id_client_grp, id_user
基本上我想确保这个表应该包含所有具有相同客户端组和相同id_user的行,如果不是我想知道哪个pay_id是罪魁祸首并向用户抛出错误。
有人可以帮我查询。
谢谢,
仙人
答案 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)......
但是,它的可用性和正确的语法更依赖于供应商。