【发布时间】:2019-03-24 15:23:40
【问题描述】:
我需要一些关于 SQL 逻辑/语言的建议。我有一个游标,可以在表格中循环查看数千个 year + customer_id + order_no 组合。
数据样本
year customer_id order_no markerA markerB markerC MarkerD
2018 32329 523142
2018 32329 523243
2018 39566 523508
2018 42352 523214
2017 17675 470537
2017 21486 479414
2017 39566 479038
2017 42352 479220
等等
我需要我的逻辑做的是说将组合的值拉到 customer_id + year + order_no 之上
如果没有 customer_no 再次出现(在初始拉取之后)然后MarkerA - 'Y'.
如果 customer_no 再次出现 -- 如果那一年是相同的,则在初始拉取中,则 MarkerB -'Y'.
如果 customer_no 再次出现 -- 但年份不同,如果年份是 - 1 则进一步查看 MarkerC -'Y'.
但是如果 customer_no 再次出现 -- 但年份不同,如果年份不是 year - 1 则进一步审查,但在其他地方确实存在第 2 年或更大的线,则 MarkerD -'Y'.
declare @order_year int
declare @customer_id int
declare @order_dt datetime
declare @order_no int
BEGIN
DECLARE db_cursor CURSOR FOR
Select distinct year, customer_id, order_dt, order_no From #Compare_Data
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @order_year, @customer_no, @order_dt, @order_no
WHILE @@FETCH_STATUS = 0
BEGIN
...我知道我需要一系列 IF 语句,但我不确定如果存在比较什么/如何比较。不可能说是否存在值,因为当然存在值,您只是从表中提取了 customer_no/season 等。我怎么说除了我正在查看的值之外是否存在值。
FETCH NEXT FROM db_cursor INTO @customer_no, @order_dt, @order_no
END
CLOSE db_cursor
DEALLOCATE db_cursor
END
【问题讨论】:
-
不清楚,对我来说似乎是相互矛盾的要求。您的解决方案是不确定的,因为表没有内在顺序。
-
@paparazzo 我怎样才能清除这个 - 我需要评估每个行组合并查看数据是否出现在表格的其他地方。在第一次评估中,我必须比较其余数据中的 customer_id,而不考虑其他任何内容等等。
标签: sql-server tsql if-statement cursor exists