2017-01-25 3 views
1

내가 각 ID에 대한 숫자 전체를 얻기 위해 특정 열 합계를 시도하고 존재 열 -하지만 내 결과 세트가 6합 특정 여러 기록이

의 배수를 들어이 결과 집합을 반환 예를 들어 쿼리의 request_ID에는 6 개의 docket_ID가 있고 각 docket_ID에는 6 개의 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 개 행을 반환 내가 (RD 합계하려고하면

쿼리 : 같은

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; 

데이터 세트 보인다. 내가 어떻게 엘림 수는 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; 

해야 할 때 264 : - NUMBER_OF_PAGES) 내가 기대하고 무엇을 내 결과는 6 배 docket_ids의 중복 값을 inate하여 레코드의 실제 합계를 반환 하시겠습니까?

감사합니다,

+0

시도'합 (rd.number_of_pages) docket_id order by received_date) ' – scsimon

답변

1

가 여기에 상관 하위 쿼리

을 USINT 방법이다
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 

ID로 (파티션 위에 쿼리

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 
+0

감사합니다 scsimon - 이것은 가까운입니다. 저는 35라는 값을 얻었습니다. 페이지 수가 9 인 레코드 중 하나를 합산하지 않을 가능성이 가장 높습니다. 이것이 OVER/PARTITION BY를 필요로 할지도 모른다고 생각했지만 그것을 쓰는 방법을 모르겠습니다. – MISNole

+0

@MISNole 나는 당신을 위해 시험 데이터를 다른 방법으로 사용했다. 편집을 참조하십시오. – scsimon

+0

그리고 다시 작동하도록 코드를 다시 추가하십시오. – scsimon