Sai*_*han 1 sql sql-server-2000 row-number
我正在尝试获取顺序行编号,但无论我尝试什么都不起作用.这是我的查询
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
Run Code Online (Sandbox Code Playgroud)
这是该查询的结果
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
Run Code Online (Sandbox Code Playgroud)
我试过了
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
Run Code Online (Sandbox Code Playgroud)
但结果是
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
Run Code Online (Sandbox Code Playgroud)
您的计数是在dbo.mac_actlocmap中计算未聚合和未过滤的行.但是您正在使用聚合和过滤器与子查询进行比较.
有了这种复杂性,请使用临时表.这比在SQL Server 2000上模拟ROW_NUMBER所需的三角形连接两次完全相同的查询更容易
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
378 次 |
| 最近记录: |