Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 server 嵌套和SQL查询_Sql Server - Fatal编程技术网

Sql server 嵌套和SQL查询

Sql server 嵌套和SQL查询,sql-server,Sql Server,我要从SQL server表中得到一个总数,它涉及到子计算,我很难弄清楚如何进行嵌套。如果需要任何帮助,我都会很感激 表(注:截断为有用数据) PrintJob-ID、部门、副本计数 有许多印记(注意它的拷贝数不同) 印记-ID、作业ID、副本计数 有许多页面数据 PageData-ImprintID、索引、ImpressionCount 现在每个部门我都需要 合计(PrintJob.CopyCount*其合计(print.CopyCount*其合计(print的PageData.Impress

我要从SQL server表中得到一个总数,它涉及到子计算,我很难弄清楚如何进行嵌套。如果需要任何帮助,我都会很感激

表(注:截断为有用数据)

PrintJob-ID、部门、副本计数 有许多印记(注意它的拷贝数不同) 印记-ID、作业ID、副本计数 有许多页面数据 PageData-ImprintID、索引、ImpressionCount

现在每个部门我都需要 合计(PrintJob.CopyCount*其合计(print.CopyCount*其合计(print的PageData.ImpressionCount)))

因此,对于每个印记,需要将其所有页面数据的印象计数相加,然后乘以印记的拷贝数

然后,可以将每个打印作业的每个压印总数相加,得出每个打印作业的压印副本数,然后再乘以PrintJob.CopyCount,得出每个作业的压印总数

然后可以将其汇总为每个部门的每个打印作业,以给出我的最终结果表,但如何在一个查询中高效地获得结果

样本数据

CREATE TABLE PrintJob
(
ID varchar(10),
DEPT varchar(10),
CopyCount int
);

CREATE TABLE Imprint
(
ID varchar(10),
JobId varchar(10),
CopyCount int
);

CREATE TABLE PageData
(
ImprintID varchar(10),
[Index] int,
ImpressionCount int
);

INSERT INTO PrintJob (ID, DEPT, CopyCount)
Values 
('J1','D1',2),
('J2','D1',1),
('J3','D2',5),
('J4','D2',4)
;

INSERT INTO Imprint (ID, JobId, CopyCount)
Values
('I1','J1',1),
('I2','J1',2),
('I3','J2',1),
('I4','J3',2),
('I5','J4',2),
('I6','J4',2)
;

INSERT INTO PageData (ImprintID, [Index], ImpressionCount)
Values 
('I1',1,1),
('I1',2,3),
('I1',3,1),
('I2',1,1),
('I3',1,1),
('I3',2,2),
('I4',1,1),
('I4',2,1),
('I5',1,1),
('I6',1,5)
;

如果我是对的,你的意思是:

select j.DEPT, sum(j.CopyCount * i.SubCount) TotalCount
from PrintJob j
join (
    select i.JobId, sum(i.CopyCount * p.ICountSum) SubCount
    from Imprint i
        join (
            select ImprintID, SUM(ImpressionCount) ICountSum
            from PageData 
            group by ImprintID) p on p.ImprintID= i.ID
    group by i.JobId) i on i.JobId = j.ID
group by j.DEPT

有样本数据…请编辑您的问题,以包括相关表格DDL、一些样本数据(最好是DML语句)和所需输出。