Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果一个组在SQL中的某个列中包含一个值,那么如何显示整个组_Sql_Sql Server - Fatal编程技术网

如果一个组在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”