34,838
社区成员




<HTML>
<HEAD>
<TITLE>PL/SQL Developer Export</TITLE>
</HEAD>
<BODY>
<TABLE BORDER="1">
<TR><TH> </TH><TH>DIVISION_ID</TH><TH>NATION_ID</TH><TH>ZDRS</TH><TH>WEEKNUM</TH></TR>
<TR><TD>1</TD><TD>海淀</TD><TD>3</TD><TD>34</TD><TD>6</TD></TR>
<TR><TD>2</TD><TD>海淀</TD><TD>2</TD><TD>33</TD><TD>6</TD></TR>
<TR><TD>3</TD><TD>海淀</TD><TD>1</TD><TD>22</TD><TD>6</TD></TR>
<TR><TD>4</TD><TD>昌平</TD><TD>3</TD><TD>44</TD><TD>6</TD></TR>
<TR><TD>5</TD><TD>昌平</TD><TD>2</TD><TD>32</TD><TD>6</TD></TR>
<TR><TD>6</TD><TD>昌平</TD><TD>1</TD><TD>54</TD><TD>6</TD></TR>
<TR><TD>7</TD><TD>西城</TD><TD>1</TD><TD>42</TD><TD>6</TD></TR>
<TR><TD>8</TD><TD>西城</TD><TD>2</TD><TD>44</TD><TD>6</TD></TR>
<TR><TD>9</TD><TD>海淀</TD><TD>1</TD><TD>45</TD><TD>5</TD></TR>
<TR><TD>10</TD><TD>海淀</TD><TD>2</TD><TD>55</TD><TD>5</TD></TR>
<TR><TD>11</TD><TD>海淀</TD><TD>3</TD><TD>176</TD><TD>5</TD></TR>
<TR><TD>12</TD><TD>昌平</TD><TD>3</TD><TD>233</TD><TD>5</TD></TR>
<TR><TD>13</TD><TD>昌平</TD><TD>2</TD><TD>4</TD><TD>5</TD></TR>
<TR><TD>14</TD><TD>西城</TD><TD>2</TD><TD>6</TD><TD>5</TD></TR>
<TR><TD>15</TD><TD>西城</TD><TD>1</TD><TD>73</TD><TD>5</TD></TR>
</TABLE>
</BODY>
</HTML>
--> 测试数据: #T
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (DIVISION_ID varchar(4),NATION_ID int,ZDRS int,WEEKNUM int)
insert into #T
select '海淀',3,34,6 union all
select '海淀',2,33,6 union all
select '海淀',1,22,6 union all
select '昌平',3,44,6 union all
select '昌平',2,32,6 union all
select '昌平',1,54,6 union all
select '西城',1,42,6 union all
select '西城',2,44,6 union all
select '海淀',1,45,5 union all
select '海淀',2,55,5 union all
select '海淀',3,176,5 union all
select '昌平',3,233,5 union all
select '昌平',2,4,5 union all
select '西城',2,6,5 union all
select '西城',1,73,5
declare @max int
select @max = max(weeknum) from #T
select
DIVISION_ID,
NATION_ID,
prevWeek = sum(case WEEKNUM when @max-1 then ZDRS else 0 end),
thisWeek = sum(case WEEKNUM when @max then ZDRS else 0 end)
from #T
group by DIVISION_ID,NATION_ID
order by DIVISION_ID,NATION_ID
/*
DIVISION_ID NATION_ID prevWeek thisWeek
----------- ----------- ----------- -----------
昌平 1 0 54
昌平 2 4 32
昌平 3 233 44
海淀 1 45 22
海淀 2 55 33
海淀 3 176 34
西城 1 73 42
西城 2 6 44
*/
create table tb(DIVISION_ID varchar(20),NATION_ID int,ZDRS int,WEEKNUM int)
insert into tb values('海淀',3,34,6)
insert into tb values('海淀',2,33,6)
insert into tb values('海淀',1,32,6)
insert into tb values('昌平',3,44,6)
insert into tb values('昌平',2,32,6)
insert into tb values('昌平',1,54,6)
insert into tb values('西城',1,42,6)
insert into tb values('西城',2,44,6)
insert into tb values('海淀',1,45,5)
insert into tb values('海淀',2,55,5)
insert into tb values('海淀',3,176,5)
insert into tb values('昌平',3,233,5)
insert into tb values('昌平',2,4,5)
insert into tb values('西城',2,6,5)
insert into tb values('西城',1,73,5)
go
--方法一
select DIVISION_ID,
NATION_ID,
sum(case WEEKNUM when 5 then ZDRS else 0 end) [weeknum=5],
sum(case WEEKNUM when 6 then ZDRS else 0 end) [weeknum=6]
from tb
group by DIVISION_ID,NATION_ID
order by DIVISION_ID,NATION_ID
--方法二
select DIVISION_ID,
NATION_ID,
[weeknum=5] = isnull((select sum(ZDRS) from tb where WEEKNUM = 5 and DIVISION_ID = t.DIVISION_ID and NATION_ID = t.NATION_ID),0) ,
[weeknum=6] = isnull((select sum(ZDRS) from tb where WEEKNUM = 6 and DIVISION_ID = t.DIVISION_ID and NATION_ID = t.NATION_ID),0)
from tb t
group by DIVISION_ID,NATION_ID
order by DIVISION_ID,NATION_ID
drop table tb
/*
DIVISION_ID NATION_ID weeknum=5 weeknum=6
-------------------- ----------- ----------- -----------
昌平 1 0 54
昌平 2 4 32
昌平 3 233 44
海淀 1 45 32
海淀 2 55 33
海淀 3 176 34
西城 1 73 42
西城 2 6 44
(所影响的行数为 8 行)
*/
create table tb(DIVISION_ID varchar(20),NATION_ID int,ZDRS int,WEEKNUM int)
insert into tb values('海淀',3,34,6)
insert into tb values('海淀',2,33,6)
insert into tb values('海淀',1,32,6)
insert into tb values('昌平',3,44,6)
insert into tb values('昌平',2,32,6)
insert into tb values('昌平',1,54,6)
insert into tb values('西城',1,42,6)
insert into tb values('西城',2,44,6)
insert into tb values('海淀',1,45,5)
insert into tb values('海淀',2,55,5)
insert into tb values('海淀',3,176,5)
insert into tb values('昌平',3,233,5)
insert into tb values('昌平',2,4,5)
insert into tb values('西城',2,6,5)
insert into tb values('西城',1,73,5)
go
select DIVISION_ID,
NATION_ID,
sum(case WEEKNUM when 5 then ZDRS else 0 end) [weeknum=5],
sum(case WEEKNUM when 6 then ZDRS else 0 end) [weeknum=6]
from tb
group by DIVISION_ID,NATION_ID
order by DIVISION_ID,NATION_ID
drop table tb
/*
DIVISION_ID NATION_ID weeknum=5 weeknum=6
-------------------- ----------- ----------- -----------
昌平 1 0 54
昌平 2 4 32
昌平 3 233 44
海淀 1 45 32
海淀 2 55 33
海淀 3 176 34
西城 1 73 42
西城 2 6 44
(所影响的行数为 8 行)
*/
select DIVISION_ID,
NATION_ID,
sum(case WEEKNUM when 5 then ZDRS else 0 end) [weeknum=5],
sum(case WEEKNUM when 5 then ZDRS else 0 end) [weeknum=6]
from tb
group by DIVISION_ID,NATION_ID
order by DIVISION_ID,NATION_ID
declare @tb table (DIVISION_ID varchar(20),NATION_ID int,ZDRS int,WEEKNUM int)
insert into @tb select '海淀',3,34,6
insert into @tb select '海淀',2,33,6
insert into @tb select '海淀',1,32,6
insert into @tb select '昌平',3,44,6
insert into @tb select '昌平',2,32,6
insert into @tb select '昌平',1,54,6
insert into @tb select '西城',1,42,6
insert into @tb select '西城',2,44,6
insert into @tb select '海淀',1,45,5
insert into @tb select '海淀',2,55,5
insert into @tb select '海淀',3,176,5
insert into @tb select '昌平',3,233,5
insert into @tb select '昌平',2,4,5
insert into @tb select '西城',2,6,5
insert into @tb select '西城',1,73,5
select DIVISION_ID,NATION_ID,
isnull(sum(case when weeknum=6 then zdrs end),0) as 'weeknum=6',
isnull(sum(case when weeknum=5 then zdrs end),0) as 'weeknum=5'
from @tb group by DIVISION_ID,NATION_ID
order by DIVISION_ID
select DIVISION_ID,NATION_ID,
sum(case when weeknum=6 then zdrs end) as 'weeknum=6',
sum(case when weeknum=5 then zdrs end) as 'weeknum=5'
from 表
group by DIVISION_ID,NATION_ID