Ниже приведен пример трех типов таблиц, которые у меня есть
CREATE TABLE TestCs(
[DefendantNumber] VARCHAR(60),
[FileNumber] VARCHAR(60),
[ReferralDate] datetime,
[BookedFirstName] VARCHAR(60),
)
INSERT INTO TestCs VALUES ('1111','510-1','2019-01-01','Mike')
INSERT INTO TestCs VALUES ('1111','510-2','2019-01-01','Mike')
INSERT INTO TestCs VALUES ('2222','510-3','2019-01-02','John')
INSERT INTO TestCs VALUES ('3333','510-4','2019-01-04','Kelly')
INSERT INTO TestCs VALUES ('444','510-5','2019-01-04','Lamar')
CREATE TABLE Testcharge(
[FileNumber] VARCHAR(60),
[ChargeDescription] VARCHAR (60)
)
INSERT INTO Testcharge VALUES('510-1','Mu')
INSERT INTO Testcharge VALUES('510-1','St')
INSERT INTO Testcharge VALUES('510-2','Bu')
INSERT INTO Testcharge VALUES('510-2','Po')
INSERT INTO Testcharge VALUES ('510-3','Po')
INSERT INTO Testcharge VALUES ('510-3','Sp')
INSERT INTO Testcharge VALUES('510-4','Po')
INSERT INTO Testcharge VALUES('510-5','Ra')
INSERT INTO Testcharge VALUES('510-5','Bu')
CREATE TABLE TestEvent(
[FileNumber] VARCHAR(60),
[EventCode] VARCHAR (60)
)
INSERT INTO TestEvent VALUES('510-1','TR')
INSERT INTO TestEvent VALUES('510-1','HRL')
INSERT INTO TestEvent VALUES('510-1','CSCT')
INSERT INTO TestEvent VALUES('510-2','PREL')
INSERT INTO TestEvent VALUES('510-2','CSCT')
INSERT INTO TestEvent VALUES('510-3','GJ')
INSERT INTO TestEvent VALUES('510-3','DIV')
INSERT INTO TestEvent VALUES('510-3','CSCT')
INSERT INTO TestEvent VALUES('510-4','FLW')
INSERT INTO TestEvent VALUES('510-4','CST')
INSERT INTO TestEvent VALUES('510-5','CAP')
INSERT INTO TestEvent VALUES('510-5','CSCT')
Мне удалось связать эти таблицы с помощью следующего запроса
SELECT cs.DefendantNumber,
cs.FileNumber,
cs.ReferralDate,
cs.BookedFirstName,
chrg.ChargeDescription,
ev.EventCode,
chrg.ChargeDescription
FROM TestCs AS cs INNER JOIN Testcharge AS chrg
ON cs.FileNumber=chrg.FileNumber LEFT JOIN TestEvent AS ev
ON ev.FileNumber=cs.FileNumber
WHERE DefendantNumber IN (SELECT DefendantNumber FROM TestCs GROUP BY DefendantNumber HAVING COUNT(*)=1)
Из таблицы, полученной иззапрос выше, я хочу убедиться, что я могу получить FileNumber тех, кто не имеет определенного описания заряда. Например, я хочу убедиться, что я получаю FileNumber
от тех, у кого нет определенного типа заряда. Например, FileNumber
из тех, у кого нет 'Ra' ChargeDescription
В конце я использовал следующий запрос
AND NOT EXISTS (SELECT 1 FROM TestCs AS cs2 WHERE cs2.FileNumber=cs.FileNumber AND chrg.ChargeDescription='Ra')
Однако он не делает то, чтоЯ собирался. Например, я хочу исключить FileNumber
из тех, у кого есть "Ra"
в столбце ChargeDescription
. Соответственно, я не должен видеть 510-5
. Как мне исключить всю группу, если эта группа из FileNumber
s содержит определенное значение в столбце ChargeDescription
?
Должны появиться только следующие значения:
FileNumber DefendantNumber
510-3 2222
510-3 2222
510-3 2222
510-3 2222
510-3 2222
510-3 2222
510-4 3333
510-4 3333