Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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 - Fatal编程技术网

Sql 对项目进行计数以及查看者的查询

Sql 对项目进行计数以及查看者的查询,sql,Sql,我正在尝试编写一个查询来统计项目以及谁查看了这些项目。我不知道这是否可能。基本上我试着让它看一些东西,决定它是否应该计数,并由看它的人来排序 我一直在环顾四周,我看到的所有例子都没有显示类似的内容。我知道下面的代码只是一遍一遍地计数相同的东西,但每次我试图让它考虑考官,它基本上告诉我,它不能做到这一点。 编辑根据要求,这里是查询中调用的4个表 CREATE TABLE examiner ( examinerID INT IDENTITY(1,1) PRIMARY KEY, fir

我正在尝试编写一个查询来统计项目以及谁查看了这些项目。我不知道这是否可能。基本上我试着让它看一些东西,决定它是否应该计数,并由看它的人来排序

我一直在环顾四周,我看到的所有例子都没有显示类似的内容。我知道下面的代码只是一遍一遍地计数相同的东西,但每次我试图让它考虑考官,它基本上告诉我,它不能做到这一点。 编辑根据要求,这里是查询中调用的4个表

CREATE TABLE examiner (
    examinerID INT IDENTITY(1,1) PRIMARY KEY,
    firstName CHAR(10),
    lastName CHAR(15));

CREATE TABLE evidence (
    evidenceID INT IDENTITY(1,1) PRIMARY KEY,
    faNumber VARCHAR(50) NOT NULL ,
    itemNumber VARCHAR(10) UNIQUE,
    evidenceNumber CHAR(10),
    isCDDVD VARCHAR(3),
    make CHAR(20),
    modle CHAR(20),
    identifier CHAR(20),
    typeOfDevice CHAR(20),
    size INT,
    notes VARCHAR(50));

CREATE TABLE storageMedia (
    PRIMARY KEY (belongsTo,subKey),
    belongsTO VARCHAR(10) CONSTRAINT FK_Evidence_StorageMedia_BelongsTo FOREIGN KEY REFERENCES evidence(itemNumber) ON DELETE CASCADE,
    subKey VARCHAR(5),
    faNumber VARCHAR(50) NOT NULL,
    make CHAR(20),
    modle CHAR(20),
    identifier CHAR(20),
    typeOfStorageDevice CHAR(20),
    evidenceNumber CHAR(10),
    size INT,
    notes VARCHAR(50));

CREATE TABLE faLog (
    faid INT IDENTITY(1,1) PRIMARY KEY,
    faNumber VARCHAR(50) NOT NULL UNIQUE,
    caseNumber VARCHAR(50) NOT NULL,
    startDate CHAR(10),
    endDate CHAR(10),
    examinerID INT CONSTRAINT FK_Examiner_FALog_examinerID FOREIGN KEY REFERENCES examiner(examinerID) ON DELETE CASCADE,
    DetectiveID INT CONSTRAINT FK_Detective_FALog_DetectiveID FOREIGN KEY REFERENCES detective(detectiveID) ON DELETE CASCADE,
    subjectID INT CONSTRAINT FK_theSubject_FALog_theSubjectID FOREIGN KEY REFERENCES theSubject(subjectID) ON DELETE CASCADE,
    authorazation CHAR(10),
    faStatus CHAR(15));

    ALTER TABLE evidence ADD CONSTRAINT FK_FAlog_Evidence_FANumber FOREIGN KEY (faNumber) REFERENCES faLog(faNumber) ON DELETE CASCADE;
    ALTER TABLE storageMedia ADD CONSTRAINT FK_FAlog_storageMedia_FANumber FOREIGN KEY (faNumber) REFERENCES faLog(faNumber);
有问题的问题

SELECT DISTINCT e.examinerID,
            e.lastName,
            (SELECT COUNT(evidence.typeOfDevice) 
            FROM evidence
            WHERE (evidence.typeOfDevice='HDD' OR evidence.typeOfDevice='SSD'))
            +
            (SELECT COUNT(storageMedia.typeOfStorageDevice) 
            FROM storageMedia
            WHERE (storageMedia.typeOfStorageDevice ='HDD' OR storageMedia.typeOfStorageDevice ='SSD')) AS 'HDD/SSD'
FROM examiner e
    INNER JOIN faLog FA ON FA.examinerID =e.examinerID
    INNER JOIN evidence EVI ON FA.faNumber= EVI.faNumber
    INNER JOIN storageMedia SM ON SM.faNumber =FA.faNumber
--WHERE (EVI.typeOfDevice ='HDD' OR EVI.typeOfDevice ='SSD') OR (SM.typeOfStorageDevice ='HDD'OR SM.typeOfStorageDevice ='SSD')
GROUP BY e.examinerID, e.lastName
我试着让它像这样输出

但是上面的代码看起来是这样的


您不需要子查询。下面的sql是您想要的吗?如果没有,则必须将子查询更改为“相关”

SELECT e.examinerID,
                e.lastName,
                 COUNT(DISTINCT EVI.typeOfDevice) 
                +
                COUNT(SM.typeOfStorageDevice) AS 'HDD/SSD'
    FROM examiner e
        INNER JOIN faLog FA ON FA.examinerID =e.examinerID
        INNER JOIN evidence EVI ON FA.faNumber= EVI.faNumber
        INNER JOIN storageMedia SM ON SM.faNumber =FA.faNumber
    WHERE (EVI.typeOfDevice='HDD' OR EVI.typeOfDevice='SSD')
    AND (SM.typeOfStorageDevice ='HDD' OR SM.typeOfStorageDevice ='SSD')
    GROUP BY e.examinerID, e.lastName

正如@peterHe之前所述,我需要将其更改为相关查询。我就是这样修好的 谢谢你@peterHe

选择e.lastName, e、 名字, 选择计数* 根据证据EVI FA.faNumber=EVI.faNumber上的内部联接faLog FA 其中“HDD”中的EVI.typeof设备、“SSD”和FA.检验员ID=e.检验员ID +选择计数* 来自storageMedia SM FA上的内部联接faLog FA.faNumber=SM.faNumber 其中,“HDD”中存储设备的SM.TYPE、“SSD”和FA.检验员ID=e.检验员ID
来自考官e的样本数据和期望的结果将非常有用。您的查询引用了四个表,其中没有一个表被解释过。人们只能推测数据中的表情是如何表达的。你能发布一些样本数据和预期结果吗?我搞不懂你想实现什么你是对的我需要一个相关的查询。非常感谢。我不擅长在这个网站上设置格式,但用词来说,我有两个表,其中我保存了各种类型的设备,我想看看谁在处理什么设备。下面我发布了我提出的解决方案,再次感谢你指导我朝着正确的方向前进。
ID|   Name    |HDD/SSD 

3 |   John    | 15

8 |   Chris   | 15

12|   Jake    | 15

68|   Tyler   | 15
SELECT e.examinerID,
                e.lastName,
                 COUNT(DISTINCT EVI.typeOfDevice) 
                +
                COUNT(SM.typeOfStorageDevice) AS 'HDD/SSD'
    FROM examiner e
        INNER JOIN faLog FA ON FA.examinerID =e.examinerID
        INNER JOIN evidence EVI ON FA.faNumber= EVI.faNumber
        INNER JOIN storageMedia SM ON SM.faNumber =FA.faNumber
    WHERE (EVI.typeOfDevice='HDD' OR EVI.typeOfDevice='SSD')
    AND (SM.typeOfStorageDevice ='HDD' OR SM.typeOfStorageDevice ='SSD')
    GROUP BY e.examinerID, e.lastName