2017-01-25 6 views
1

存在する場合、私は、各IDの番号の合計を取得するための特定の列を合計しようとしている - しかし、私の結果セットは6.和特定の列の複数のレコードが

の倍数である、結果セットを返しますたとえば、クエリのrequest_IDには6つのdocket_IDが関連付けられており、各docket_IDには6つのmessage_document_IDが関連付けられています。

問合せ:

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 

は、これは自分自身を3回以上繰り返して - 私はSUM(RDにしようとしたとき、私は、データの価値が36行を返すと。 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からの重複値をinateしますか? 、IDによるパーティション(オーバー

おかげで、

+0

試し '合計(rd.number_of_pages) docket_id order by received_date) ' – scsimon

答えて

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 

相関サブクエリをUSINT方法ですあなたのクエリ

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

ありがとうscimon - これは近いです。私は35の値を得ています。これは、ページカウントの値が9のレコードの1つを合計しない可能性が高いことを示しています。これはOVER/PARTITION BYを必要とするかもしれないと思ったが、私はそれを書く方法がわからなかった。 – MISNole

+0

@MISNole私はあなたのためのテストデータで別の方法を使用しました。編集を参照してください。 – scsimon

+0

あなたのコードを元に戻すようにしてください。 – scsimon

関連する問題