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。
不知道您的数据,视图定义将是:
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 子句如何,您都需要保留数据,您可能只需要放弃视图的想法,并通过访问数据的查询获得创意。