【发布时间】:2016-12-08 18:46:04
【问题描述】:
我有一个包含多个字段的视图,来自 SQL Server 2016,如果满足某些条件,我喜欢放置一个序列号。 为了举例说明,请考虑以下表格:
表格:
GLOBALID | SERVICE_GLOBALID | PHOTO_A_GLOBALID | PHOTO_B_GLOBALID
---------+------------------+------------------+-----------------
EB8F9BE7 | 0CD85BE7 | 490794EC | 181C5426
EB8F9BE7 | 04405456 | C3A75999 | 5BA26B15
ECF5F7D1 | 8E8A63C2 | 1A225178 | NULL
ECF5F7D1 | 4EB18887 | 2139CF18 | C7B96E0E
一些细节:
-
GLOBALID可以重复(因为这是几个表的视图,其中有一些CROSS APPLY和OUTER APPLY); -
SERVICE_GLOBALID永不重复; -
PHOTO_A_GLOBALID总是有一个值(从不重复); -
PHOTO_B_GLOBALID可以有值,但有时是NULL(有值时从不重复)。
所以,我喜欢为PHOTO_A_GLOBALID 和PHOTO_B_GLOBALID 设置一个序号,但序号必须使用视图中的两列。如果PHOTO_B_GLOBALID 是NULL,则序号不能递增。
这是我想要的结果(看第三行):
结果
GLOBALID | SERVICE_GLOBALID | PHOTO_A_GLOBALID | PHOTO_B_GLOBALID | SEQ_A | SEQ_B
---------+------------------+------------------+------------------+-------+------
EB8F9BE7 | 0CD85BE7 | 490794EC | 181C5426 | 1 | 2
EB8F9BE7 | 04405456 | C3A75999 | 5BA26B15 | 3 | 4
ECF5F7D1 | 8E8A63C2 | 1A225178 | NULL | 5 | NULL
ECF5F7D1 | 4EB18887 | 2139CF18 | C7B96E0E | 6 | 7
我尝试使用 ROW_NUMBER(),但我真的不知道如何处理两列。
【问题讨论】:
-
分配的数字在顺序上真的很重要吗?我们如何知道 1,2 集与 3,4 集?
-
@xQbert 我想我不明白你的问题。必须是一个序列,从 1 到无穷大,与行出现的顺序相同(行的顺序是按日期顺序生成此视图)。
-
你覆盖了它,结果是按日期排序的,因此应该按那个 dat.e 编号
标签: sql sql-server sql-server-2016