如果一个组在SQL中的某个列中包含一个值,那么如何显示整个组
下面是我拥有的三种类型的表的示例如果一个组在SQL中的某个列中包含一个值,那么如何显示整个组,sql,sql-server,Sql,Sql Server,下面是我拥有的三种类型的表的示例 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')
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)
从上面查询得到的表中,我想确保我能够获得那些没有特定费用说明的人的文件号。例如,我想确保获得那些没有特定类型费用的人的文件号。例如,让我们输入那些没有“Ra”的用户的文件号
ChargeDescription
最后,我使用了以下查询
AND NOT EXISTS (SELECT 1 FROM TestCs AS cs2 WHERE cs2.FileNumber=cs.FileNumber AND chrg.ChargeDescription='Ra')
然而,它并没有达到我的目的。例如,我想排除那些在ChargeDescription
列中有“Ra”
的人的FileNumber
s。因此,我不能看到510-5
。如果在ChargeDescription
列中包含某个值的FileNumber
s组,如何排除整个组
应该显示的唯一值是
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
对此,可以使用不存在的相关子查询
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'
)
和ChargeDescription'Ra'
在where子句中?如果任何行的ChargeDescription的ChargeDescription为'Ra',您只希望FileNumber列为空。因此,被告2222将显示文件编号,并将显示3333。但是在444的行中,它将显示NULL?还是要完全排除这些行?@SeanLange我要排除包含510-5的所有文件号行,因为与510-5关联的组的ChargeDescription具有“Ra”