【问题标题】:SQL Server 2000 row numberingSQL Server 2000 行编号
【发布时间】:2011-04-17 20:10:39
【问题描述】:

我正在尝试获取连续的行编号,但无论我尝试什么都行不通。这是我的查询

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

这是查询的结果

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

我试过了

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

但是结果是

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

【问题讨论】:

  • 您尝试过 ROW_NUMBER() 吗?我不确定它是否适用于 SQL Server 2000 - msdn.microsoft.com/en-us/library/ms186734.aspx
  • 您的计数正在计算 dbo.mac_actlocmap 中的 unaggregatedunfiltered 行。但是您正在与子查询进行比较 with 聚合和过滤器。
  • @SeanA: ROW_NUMBER() 在 SQL Server 2005 ... 中引入

标签: sql sql-server-2000 row-number


【解决方案1】:

您的计数正在计算 dbo.mac_actlocmap 中的 unaggregatedunfiltered 行。但是您正在比较一个子查询一个聚合和过滤器。

鉴于这种复杂性,请使用临时表。这比在 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

【讨论】:

  • 我试图避开临时表...只是认为我在查询中做错了...猜我别无选择。谢谢。
猜你喜欢
  • 2014-05-03
  • 2010-09-26
  • 1970-01-01
  • 2011-05-04
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
相关资源
最近更新 更多