I am trying to obtain a sequential row numbering, but whatever I am trying is not working. Here is my query
select
l.seq, l.mn_no as mn_no, l.sb_no as sb_no,
l.dp_no as dp_no,
sum(costprice) as amt
from
dbo.mac_pur_tempdetail d
inner join
dbo.mac_pur_tempheader h on d.header_id = h.header_id
开发者_运维技巧 and h.ref = 'SAH1FIHC'
inner join
dbo.mac_actlocmap l on l.loc_main = d.loc_id
and l.description = 'PUR'
group by
l.seq, l.mn_no, l.sb_no, l.dp_no
Here is the result of that query
1 4110 30 0000 17.5000
4 4110 20 0000 3.6000
6 4110 40 0000 6.0000
7 4110 10 0000 1.8000
14 4110 25 0000 3.6000
15 4110 50 0000 1.8000
I tried
select
(select count(seq)
from dbo.mac_actlocmap s
where s.seq <= a.seq and a.mn_no = s.mn_no) as new_seq,
*
from
(select
l.seq, l.mn_no as mn_no,
l.sb_no as sb_no, l.dp_no as dp_no,
sum(costprice) as amt
from
dbo.mac_pur_tempdetail d
inner join
dbo.mac_pur_tempheader h on d.header_id = h.header_id
and h.ref = 'SAH1FIHC'
inner join
dbo.mac_actlocmap l on l.loc_main = d.loc_id
and l.description = 'PUR'
group by
l.seq, l.mn_no, l.sb_no, l.dp_no) a
But the result is
1 1 4110 30 0000 17.5000
2 4 4110 20 0000 3.6000
3 6 4110 40 0000 6.0000
4 7 4110 10 0000 1.8000
7 14 4110 25 0000 3.6000
8 15 4110 50 0000 1.8000
Your count is counting unaggregated and unfiltered rows in dbo.mac_actlocmap. But you are comparing to a subquery with an aggregate and filter.
With this complexity, use a temp table. It's just easier than having exactly the same query twice for the triangular join needed to emulate ROW_NUMBER on SQL Server 2000
select
l.seq,
l.mn_no as mn_no,
l.sb_no as sb_no,
l.dp_no as dp_no,
sum(costprice) as amt
INTO #foo
from dbo.mac_pur_tempdetail d
inner join dbo.mac_pur_tempheader h
on d.header_id = h.header_id
and h.ref = 'SAH1FIHC'
inner join dbo.mac_actlocmap l
on l.loc_main = d.loc_id
and l.description = 'PUR'
group by l.seq,l.mn_no,l.sb_no,l.dp_no
select
(select count(seq) from #foo s
where s.seq <= a.seq and a.mn_no = s.mn_no) as new_seq,
* from #foo a
精彩评论