я естьНаивысший и MTD в том же запросе
create table
tbl(CustKey int, dt varchar(6), category varchar(20), amtbc int)
insert into tbl values(2475,'201402','P',100)
insert into tbl values(2475,'201403','P',130)
insert into tbl values(2475,'201311','R',2056)
insert into tbl values(2475,'201312','R',978)
insert into tbl values(2475,'201406','P',100)
insert into #tbl values(2475,'201406','R',410)
insert into tbl values(2475,'201401','P',200)
insert into #tbl values(2475,'201407','R',179)
insert into tbl values(2475,'201404','P',100)
insert into #tbl values(2475,'201405','P',380)
insert into tbl values(2475,'201407','P',100)
insert into #tbl values(2475,'201401','R',1377)
insert into tbl values(9628,'201404','P',500)
insert into #tbl values(9628,'201405','P',500)
insert into tbl values(9628,'201402','P',500)
insert into #tbl values(9628,'201406','P',500)
insert into tbl values(9628,'201401','P',500)
insert into #tbl values(9628,'201407','P',500)
insert into tbl values(9628,'201403','P',500)
выберите * от ТПС:
CustKey dt category amtbc
2475 201402 P 100
2475 201403 P 130
2475 201311 R 2056
2475 201312 R 978
2475 201406 P 100
2475 201406 R 410
2475 201401 P 200
2475 201407 R 179
2475 201404 P 100
2475 201405 P 380
2475 201407 P 100
2475 201401 R 1377
9628 201404 P 500
9628 201405 P 500
9628 201402 P 500
9628 201406 P 500
9628 201401 P 500
9628 201407 P 500
9628 201403 P 500
Тогда у меня есть этот выбор, которые считают SUM amtbc за custkey. в категории, за Dt (ежемесячном)
выберите custkey, дт, сумма (случай, когда категория в ('R'), а затем amtbc еще 0 конец) как ostatnisuma,
сумма (случай когда категория в ('P'), то amtbc еще 0 конец), как residencesuma из TBL группы по custkey, дт порядка по custKey, дт
, который дает мне это:
custkey dt ostatnisuma residencesuma
2475 201311 2056 0
2475 201312 978 0
2475 201401 1377 200
2475 201402 0 100
2475 201403 0 130
2475 201404 0 100
2475 201405 0 380
2475 201406 410 100
2475 201407 179 100
9628 201401 0 500
9628 201402 0 500
9628 201403 0 500
9628 201404 0 500
9628 201405 0 500
9628 201406 0 500
9628 201407 0 500
так что теперь я знаю, суммы для каждогомесяц. Но id хотел бы знать сумму категории P за каждый месяц (ее нормально), но для категории R я хочу знать сумму в течение всего года и вводить эту сумму за весь год в каждую строку за этот год. так что финальный стол будет выглядеть следующим образом:
custkey dt ostatnisuma residencesuma
2475 201311 2056 0
2475 201312 978 0
2475 201401 1377 1110
2475 201402 0 1110
2475 201403 0 1110
2475 201404 0 1110
2475 201405 0 1110
2475 201406 410 1110
2475 201407 179 1110
9628 201401 0 3500
9628 201402 0 3500
9628 201403 0 3500
9628 201404 0 3500
9628 201405 0 3500
9628 201406 0 3500
9628 201407 0 3500
Обратите внимание, что в действительности количество категорий, как 100+ и около 500 000 значений ... Большое спасибо заранее для вас помощь
я попытался overpartition, но он принял навсегда ...:/тогда я пытался что-то вроде «случае, когда категория = 'P' и LEFT (дт, 4) = влево (дт, 4), то SUM (AmtBC) else 0 end as residencesumapokus ", но он не работал – Nightmaresux
, затем я попробовал" (выберите SUM (amtbc) из #tbl, где category = 'P' и LEFT (dt, 4) = left (dt, 4)) в качестве resumsumapokus ", но это дает мне SUM всех «P», независимо от года:/ – Nightmaresux
, затем я попытался »(выберите isnull (SUM (amtbc), 0) из #tbl a где category = 'P' и LEFT (a.dt, 4) = left (payments.dt, 4)) как resencesumapokus ", но он будет дублировать строки :( – Nightmaresux