我试图将特定列相加以获得每个ID的总数 - 但我的结果集返回的结果集是6的倍数。
例如,我的查询中的request_ID有六个与之关联的docket_ID,每个docket_ID都有六个message_document_IDs关联。
查询:
SELECT r.id,
r.number_of_documents,
rc.docket_id,
rc.sequence_no,
rc.case_number_from_filer,
rd.number_of_pages,
rd.message_document_id,
r.received_date
FROM dbo.requests AS [r]
INNER JOIN dbo.request_court_documents_additonal_information AS [rc]
ON r.id = rc.request_id
INNER JOIN dbo.request_document_additonal_information AS [rd]
ON rd.request_id = r.id
WHERE CAST(r.received_date AS DATE) >= '10/1/2015'
AND CAST(r.received_date AS DATE) <= '9/30/2016'
AND rc.case_number_from_filer = 'NEW CASE'
AND r.id = 32700637
ORDER BY r.id,
rc.docket_id,
rd.message_document_id;
数据集如下:
id docket_id case_number nbr_of_pgs msg_doc_id received_date
32700637 197085524 NEW CASE 18 DOC00001 2015-10-01 00:01:32.590
32700637 197085524 NEW CASE 1 DOC00002 2015-10-01 00:01:32.590
32700637 197085524 NEW CASE 4 DOC00003 2015-10-01 00:01:32.590
32700637 197085524 NEW CASE 9 DOC00004 2015-10-01 00:01:32.590
32700637 197085524 NEW CASE 9 DOC00005 2015-10-01 00:01:32.590
32700637 197085524 NEW CASE 3 DOC00006 2015-10-01 00:01:32.590
32700637 197085906 NEW CASE 18 DOC00001 2015-10-01 00:01:32.590
32700637 197085906 NEW CASE 1 DOC00002 2015-10-01 00:01:32.590
32700637 197085906 NEW CASE 4 DOC00003 2015-10-01 00:01:32.590
32700637 197085906 NEW CASE 9 DOC00004 2015-10-01 00:01:32.590
32700637 197085906 NEW CASE 9 DOC00005 2015-10-01 00:01:32.590
32700637 197085906 NEW CASE 3 DOC00006 2015-10-01 00:01:32.590
32700637 197085941 NEW CASE 18 DOC00001 2015-10-01 00:01:32.590
32700637 197085941 NEW CASE 1 DOC00002 2015-10-01 00:01:32.590
32700637 197085941 NEW CASE 4 DOC00003 2015-10-01 00:01:32.590
32700637 197085941 NEW CASE 9 DOC00004 2015-10-01 00:01:32.590
32700637 197085941 NEW CASE 9 DOC00005 2015-10-01 00:01:32.590
32700637 197085941 NEW CASE 3 DOC00006 2015-10-01 00:01:32.590
这又重复了三次 - 所以我返回36行数据,当我尝试SUM(rd.number_of_pages)时 - 我的结果是我期望的6倍:264当它应该是44。
SELECT r.id,
SUM(rd.number_of_pages) AS [Pages]
FROM dbo.requests AS [r]
INNER JOIN dbo.request_court_documents_additonal_information AS [rc]
ON r.id = rc.request_id
INNER JOIN dbo.request_document_additonal_information AS [rd]
ON rd.request_id = r.id
WHERE CAST(r.received_date AS DATE) >= '10/1/2015'
AND CAST(r.received_date AS DATE) <= '9/30/2016'
AND rc.case_number_from_filer = 'NEW CASE'
AND r.id = 32700637
GROUP BY r.id;
如何从docket_ids中删除重复值以返回记录的真实总和?
谢谢,
答案 0 :(得分:1)
这是一种相关子查询的方式
if object_id('tempdb..#t') is not null drop table #t
create table #t (id int, docket_id int, case_number varchar(64), nbr_of_pgs int, msg_doc_id varchar(64), received_date datetime)
insert into #t values
(32700637,197085524,'NEW CASE',18,'DOC00001','2015-10-01 00:01:32.590'),
(32700637,197085524,'NEW CASE',1,'DOC00002','2015-10-01 00:01:32.590'),
(32700637,197085524,'NEW CASE',4,'DOC00003','2015-10-01 00:01:32.590'),
(32700637,197085524,'NEW CASE',9,'DOC00004','2015-10-01 00:01:32.590'),
(32700637,197085524,'NEW CASE',9,'DOC00005','2015-10-01 00:01:32.590'),
(32700637,197085524,'NEW CASE',3,'DOC00006','2015-10-01 00:01:32.590'),
(32700637,197085906,'NEW CASE',18,'DOC00001','2015-10-01 00:01:32.590'),
(32700637,197085906,'NEW CASE',1,'DOC00002','2015-10-01 00:01:32.590'),
(32700637,197085906,'NEW CASE',4,'DOC00003','2015-10-01 00:01:32.590'),
(32700637,197085906,'NEW CASE',9,'DOC00004','2015-10-01 00:01:32.590'),
(32700637,197085906,'NEW CASE',9,'DOC00005','2015-10-01 00:01:32.590'),
(32700637,197085906,'NEW CASE',3,'DOC00006','2015-10-01 00:01:32.590'),
(32700637,197085941,'NEW CASE',18,'DOC00001','2015-10-01 00:01:32.590'),
(32700637,197085941,'NEW CASE',1,'DOC00002','2015-10-01 00:01:32.590'),
(32700637,197085941,'NEW CASE',4,'DOC00003','2015-10-01 00:01:32.590'),
(32700637,197085941,'NEW CASE',9,'DOC00004','2015-10-01 00:01:32.590'),
(32700637,197085941,'NEW CASE',9,'DOC00005','2015-10-01 00:01:32.590'),
(32700637,197085941,'NEW CASE',3,'DOC00006','2015-10-01 00:01:32.590')
select distinct id, ct as TotalNum
from(
select distinct
id,
docket_id,
sum(nbr_of_pgs) as ct
from
#t
group by
id, docket_id)x
您的查询
select distinct id, pages
from(
SELECT
r.id,
rc.docket_id,
SUM(rd.number_of_pages) AS [Pages]
FROM dbo.requests AS [r]
INNER JOIN dbo.request_court_documents_additonal_information AS [rc]
ON r.id = rc.request_id
INNER JOIN dbo.request_document_additonal_information AS [rd]
ON rd.request_id = r.id
WHERE CAST(r.received_date AS DATE) >= '10/1/2015'
AND CAST(r.received_date AS DATE) <= '9/30/2016'
AND rc.case_number_from_filer = 'NEW CASE'
AND r.id = 32700637
GROUP BY r.id, rc.docket_id) x