2009-03-25 5 views
2

Я имею временную таблицу с тремя столбцами pay_id, id_client_grp, id_userSQL запрос, чтобы найти, если существуют различные значения для столбца

В основном я хочу, чтобы гарантировать, что эта таблица должна иметь все строки, имеющие тот же клиент group и same id_user, если нет, я хочу знать, какой pay_id является виновником, и выкинуть ошибку пользователю.

Может кто-нибудь помочь мне с запросом.

Спасибо,

Риши

ответ

-1

SELECT DISTINCT id_client_grp, id_user

должен позволить вам сделать что-то вроде

IF @@ ROWCOUNT> 1 THEN

...

Или, возможно, SELECT COUNT (DISTINCT id_ client_grp, id_user) ...

, но это более зависит от поставщика относительно его доступности и правильного синтаксиса.

1

Если вы хотите, чтобы все строки имеют одинаковые значения для некоторого множества столбцов (ваш вопрос не совсем ясно, для меня, как t9o то, что вы хотите быть такой же)

Знаете ли вы собираетесь в КОТОРАЯ pay_id , id_client_grp все строки должны быть? Или вам все равно, если они все одинаковы?
Если вы знаете, значения, которые вы ищете, просто проверить строки, которые не установлены в этих желаемых значений

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

Если вы не заботитесь, и просто хочу, чтобы они все то же самое, и они «нет», тогда вам нужно указать, какой из более чем одного набора значений является «виновником», как вы сказали ...

Если вы хотите получить еще один вопрос. пожалуйста, объясните более четко ...

Основываясь на YR комментарий, то, чтобы определить, есть ли более чем один id_client_grp, pay_id

Select Count(Distinct id_client_grp, pay_id) 
From tempTable 

Если = 1, то каждая запись имеет одинаковые значения для этих 2 поля .... Любое другое значение указывает, что три - это больше одного набора различных значений в таблице.

+0

pay_id уникален я просто хочу знать, если есть более чем один id_client_grp, id_user существует в таблице темп затем бросить исключение пользователя, чем платежи не имеют такой же id_client_grp или же id_csm_user – Rishi

1

Когда вы говорите «преступник», я предполагаю, что вы имеете в виду pay_id (s), которые не похожи на других, если предположить, что большинство.

Проблема заключается в том, что все платные функции могут стать преступниками, как только ваш SELECT COUNT (DISTINCT id_client_grp, id_user) возвращает> 1 запись, если существует относительно равномерное распределение. Трудно запрограммировать этот сценарий, так как вам нужно будет определить, что такое большинство.

Лучше всего вернуть все различные комбинации этих трех полей, а затем решить, куда идти оттуда, исходя из вашей бизнес-логики.

+0

данных: строка 1 платежный идентификатор: 1 , id_client = '86', id_user = 'r' row 2 pay id: 2, id_client = '85', id_user = 'r' row 3 pay id: 3, id_client = '86', id_user = 'r' pay_id имеет уникальный кластерный индекс В этом случае виновником является строка 2 (т.е. pay_id 2). кол-во (отличное id_client_grp, id_user))> 1 кажется лучшим вариантом. – Rishi

1

Так может этот вопрос будет предложено, как это:

Если бы я хотел, чтобы добавить уникальный индекс на моем столе через три столбца: клиентской группы, идентификатор пользователя, платить идентификатор, определить те, которые нарушают уникальный условие, когда у нас есть уникальный идентификатор оплаты для группы клиентов и пользователя-пользователя?

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 
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 

в основном создают набор с простофиль, и подпрыгивать, что против главной таблицы, чтобы получить список обижая.

Смежные вопросы