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