nik*_*kov 2 sql t-sql database sql-server
这似乎是一个非常简单的问题,但我无法弄清楚单向(单眼)SQL查询将采用以下内容并添加一个字段location number,该字段在第一次运行时将为1,对于第一次运行DAL将为2 BOS运行,并在下一次运行中运行3 DAL。我知道如何标记第一个分区(使用两个ROW_NUMBER())。
+---------+--------+-----------+----------+
| ITEM_ID | LOT_ID | ORGN_CODE | TRANS_ID |
+---------+--------+-----------+----------+
| 61 | 15161 | DAL | 992342 |
| 61 | 15161 | DAL | 992347 |
| 61 | 15161 | DAL | 1043941 |
| 61 | 15161 | BOS | 1061565 |
| 61 | 15161 | BOS | 1064997 |
| 61 | 15161 | BOS | 1064998 |
| 61 | 15161 | BOS | 1064999 |
| 61 | 15161 | BOS | 1065000 |
| 61 | 15161 | BOS | 1065036 |
| 61 | 15161 | BOS | 1065062 |
| 61 | 15161 | BOS | 1065063 |
| 61 | 15161 | DAL | 1065184 |
| 61 | 15161 | DAL | 1065185 |
| 61 | 15161 | DAL | 1065186 |
| 61 | 15161 | DAL | 1065197 |
| 61 | 15161 | DAL | 1065198 |
| 61 | 15161 | DAL | 1083864 |
| 61 | 15161 | DAL | 1083865 |
+---------+--------+-----------+----------+
Run Code Online (Sandbox Code Playgroud)
像这样尝试:
SELECT *
, DENSE_RANK() OVER(Order By GroupOrder) As GroupSequence
FROM (
SELECT *,
ROW_NUMBER() OVER(Order By TRANS_ID)
- ROW_NUMBER() OVER(Partition By ORGN_CODE Order By TRANS_ID)
As GroupOrder
FROM yourTable
) As grp
Run Code Online (Sandbox Code Playgroud)
仅一次通过,没有光标。在SQL Server(tsql)上,这符合对源表的单次扫描。