внешний запрос к списку, только если его число строк равно внутреннему подзапросу - PullRequest
0 голосов
/ 09 марта 2009

Нужна помощь по запросу с использованием sql server 2005

У меня две таблицы

код

chargecode
chargeid
orgid

запись

chargeid
itemNo
rate

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

данные:

код

100,1,100
100,2,100
100,3,100
101,11,100
101,12,100

запись

1,x1,1
1,x2,2
2,x3,2
11,x4,1
11,x5,1

, используя приведенные выше данные, в запросе должны быть указаны заряды 1 и 2, а не 11.

У меня есть способ узнать, сколько строк в записи удовлетворяет критериям, но я не могу получить начисления

select count (distinct chargeId)
from entry where chargeid in (select chargeid from code where chargecode = (SELECT A.chargecode
from code as A join code as B
ON A.chargecode = B.chargeCode and A.chargetype = B.chargetype and A.orgId = B.orgId AND A.CHARGEID = b.CHARGEid
group by A.chargecode,A.orgid
having count(A.chargecode) > 1)
) 

1 Ответ

2 голосов
/ 09 марта 2009

Прежде всего: я прошу прощения за мой совершенно неточный оригинальный ответ.

Решением вашей проблемы является самостоятельное присоединение. Самостоятельные объединения используются, когда вы хотите выбрать более одной строки из одной таблицы. В нашем случае мы хотим выбрать два идентификатора оплаты с одинаковым кодом оплаты:

SELECT DISTINCT c1.chargeid, c2.chargeid FROM code c1
JOIN code c2 ON c1.chargeid != c2.chargeid AND c1.chargecode = c2.chargecode
JOIN entry e1 ON e1.chargeid = c1.chargeid
JOIN entry e2 ON e2.chargeid = c2.chargeid
WHERE c1.chargeid < c2.chargeid

Объяснение этого:

Сначала мы выбираем любые два идентификатора заряда из «кода». DISTINCT позволяет избежать дубликатов. Мы уверены, что это два разных идентификатора и что они соответствуют одному и тому же коду оплаты.

Затем мы присоединяемся к «записи» (дважды), чтобы убедиться, что они оба появляются в таблице записей.

Этот подход дает (для вашего примера) пары (1,2) и (2,1). Поэтому мы также настаиваем на заказе; это приводит к тому, что результат устанавливается равным просто (1,2), как вы описали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...