每次交货编号多个日期

V50*_*509 2 sql-server-2008 sql-server

我有兴趣生成以下视图,其中对不同的交货日期进行编号。

SalesID    Delivery Date DateNo
SO00000014 2014-02-21    1
SO00000015 2014-02-13    1
SO00000016 2014-01-28    1
SO00000017 2014-03-17    1
SO00000018 2014-02-13    1
SO00000020 2014-03-19    1
SO00000020 2014-03-20    2
SO00000020 2014-03-21    3
Run Code Online (Sandbox Code Playgroud)

我的问题是如何对与上面 SO00000020 中的单个 SalesId 关联的不同日期进行编号。我正在使用 SQL Server 2008。

Mar*_*son 5

不知道您的数据,视图定义将是:

SELECT
    [SalesID],
    [Delivery Date],
    ROW_NUMBER() OVER (PARTITION BY [SalesID] ORDER BY [Delivery Date]) AS DateNo
FROM
    [WhatEverTable]
Run Code Online (Sandbox Code Playgroud)

http://technet.microsoft.com/en-us/library/ms186734(v=sql.105).aspx

ROW_NUMBER()本身将返回行的运行计数,但是当您添加OVER(PARTITION BY [SalesID] ORDER BY [Delivery Date])它时,它会给出每个销售 id的运行计数,按日期排序。

那有意义吗?

编辑:如果您确实将此作为视图,请注意结果将由您的 WHERE 子句过滤。使用上面的数据,如果您查询 2014 年 3 月 20 日之后发生的销售,SalesID SO00000020 将只有 2014 年 3 月 21 日的单个条目,其 DateNo 为 1。

如果无论 WHERE 子句如何,您都需要保留数据,您可能只需要放弃视图的想法,并通过访问数据的查询获得创意。