区域明智和行项目明智地使用SQL Server显示修订

时间:2014-01-08 04:30:00

标签: sql-server

我有一张表格,其中包含SO编号,行项目编号,修订编号和区域等列。

我需要明智地显示修改总数。

我有6个区域 - a,b,c,d,e,f

所以区域a的数字为1,2;区域b为3,4;其他区域同样如此。

在每个数字中,可能有1个或多个行项目编号,如10,20,30等 对于每个这样的数字,只有一个修正案(即,即使这样的数字有很多行项目编号,也只有一个修正案)

现在,在a区说,有4个数字1,2,3,4。并且在数字1中有一个行项目编号10,其修订编号为2.对于如此编号2,有4个行项目编号10,20,30,40,修订编号为0.因此对于该区域a,修改总数为2(预期结果)。我该怎么做?

Zone     so_number     line_item_number  amendment_number  
a----------        1 ----------------             10 ----------------               2  
a----------        2 ----------------             10 ----------------               0  
a----------        2 ----------------             20 ----------------               0  
a----------        2 ----------------             30 ----------------               0  
a ----------       2 ----------------             40 ----------------               0  
a ----------       3 ----------------             10----------------                1  
a ----------       4 ----------------             10 ----------------               3  
a-----------       4 -----------------            20 ----------------               3  
b -----------      6 ----------------             60 -----------------              6  
c------------      7 ----------------             80 -----------------              0  
c ----------       8 ------------------           10 -----------------              0  
d  ------------    9 -----------------            10 -----------------              2  
e  ------------    10-----------------            20  -----------------             3    
f  ------------    11-----------------             30 -----------------             1  
f -------------    11 ---------------              10 ------------------            1  
f -------------    11 ---------------              20 -------------------           1  
f ------------     12 ----------------             10 ------------------            2

对于区域,修改总数为6,区域b为6,c - 0,d - 2,e - 3,f - 3

某个区域可能包含任意数量的号码,因此该号码可能包含任意数量的行项目号码,但是,这样的号码可能只有一个修订号码

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我真的不明白你的问题和你的结果。

根据我的理解,这似乎很简单

select zone, 
sum(amendment_number) 
from tablea 
group by zone

现在我的结果将是:9-6-0-2-3-5

你只想要最后一个so_number吗?

select zone, 
sumamend 
from 
   (select zone, 
   sum(amendment_number) as sumamend, 
   row_number over (partition by zone order by so_number desc) as ord 
   from tablea 
   group by zone, so_number) b
where ord = 1

但我再次得到的结果并不相同:6-6-0-2-3-2

如果我正确理解你的评论,并希望你的例子中有所有案例,你想要这样的事情:

select zone, 
sum(amendment_number) 
   from (select distinct zone,so_number, amendment_number from #test) p
group by zone

它给出了以下结果:6-6-0-2-3-3