【发布时间】:2014-04-11 02:58:40
【问题描述】:
两个...
实际数据:
division ID date flag
ABC123 ZZZ123 1/17/2013 Y
ABC123 ZZZ123 1/25/2013 N
ABC123 ZZZ123 2/22/2013 Y
ABC123 ZZZ123 2/26/2013 N
ABC123 YYY222 3/20/2013 Y
ABC123 YYY222 5/17/2013 N
XYZ456 ZZZ999 1/15/2012 N
XYZ456 ZZZ999 1/30/2012 N
XYZ456 ZZZ123 2/09/2012 N
XYZ456 ZZZ123 4/13/2012 Y
XYZ456 ZZZ123 6/23/2012 N
XYZ456 ZZZ123 10/5/2012 Y
XYZ456 ZZZ123 11/18/2012 N
我需要构建一个新列 ORDER_group,它将根据以下规则进行填充:
- 每个部门和 ID 组合都被视为一个“组”,按日期排序,并应分配一个 ORDER_group(从 1 开始)。
- 每次“组”遇到“Y”标志时,它应该将 ORDER_group 增加 1。
- 如果“组”以标志 =“N”开始(最早日期的第一条记录),它仍应以 ORDER_group = 1 开始。
- 如果“组”以标志 =“Y”开头(第一个记录最早的日期),它仍应以 ORDER_group = 1 开头。
- 每个后续记录都应该是相同的 ORDER_group 编号,除非遇到新的“组”(分区/ID),在此位置,它应该重置回 1,或者遇到下一个标志 =“Y”。李>
预期结果:
division ID date flag ORDER_group
ABC123 ZZZ123 1/17/2013 Y 1
ABC123 ZZZ123 1/25/2013 N 1
ABC123 ZZZ123 2/22/2013 Y 2
ABC123 ZZZ123 2/26/2013 N 2
ABC123 YYY222 3/20/2013 Y 1
ABC123 YYY222 5/17/2013 N 1
XYZ456 ZZZ999 1/15/2012 N 1
XYZ456 ZZZ999 1/30/2012 N 1
XYZ456 ZZZ123 2/09/2012 N 1
XYZ456 ZZZ123 4/13/2012 Y 2
XYZ456 ZZZ123 6/23/2012 N 2
XYZ456 ZZZ123 10/5/2012 Y 3
XYZ456 ZZZ123 11/18/2012 N 3
理想情况下,这应该在没有循环/光标的情况下完成,除非 CTE/临时表存在性能原因。填充此新列的最佳方式是什么?
任何帮助将不胜感激。
实际数据的 SQL Fiddler:http://sqlfiddle.com/#!3/5cca0/2
【问题讨论】:
-
您的问题到底是什么?你试过什么?请分享这些额外信息。
-
不确定我是如何完全忽略我的问题的。更新了我原来的问题。感谢您指出。
-
你可以为此准备 sqlfiddle 吗?
-
为示例数据添加了提琴手链接。
标签: sql-server sql-server-2008 tsql