以下是我拥有的三种表格类型的示例
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
有a"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
您可以为此使用带有NOT EXISTS的相关子查询。
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 cs.DefendantNumber IN
(
SELECT DefendantNumber
FROM TestCs
GROUP BY DefendantNumber
HAVING COUNT(*) = 1
)
AND NOT EXISTS
(
SELECT *
FROM Testcharge c
WHERE c.FileNumber = cs.FileNumber
AND c.ChargeDescription = 'Ra'
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句