【发布时间】:2016-10-14 09:56:57
【问题描述】:
我有一个包含现有数据的表。对于该表第一列中的每个唯一值,我们有一个应该按顺序排列的列,但该表已乱序。我想运行一条 SQL 语句,将第二列按顺序放回原处。我可以通过这个 SQL 看到我想要的结果:
select FORMULA_ID, ATTRIB_CODE, ATTRIB_VAL, ATTRIB_ORDER,
rank() over (partition by formula_id order by attrib_code, attrib_val) AS WANT_THIS
from ATTRIB
产量:
FORMULA_ID ATTRIB_CODE ATTRIB_VAL ATTRIB_ORDER WANT_THIS
----------- -------------------- ---------------- ------------ ---------
2791 C_BRAND ROMAN HOLIDAY 3 1
2791 C_ENDUSE DINNER 4 2
2791 C_ENDUSE SNACK 6 3
2791 C_ENDUSER 10-17 7 4
2791 C_PRODTYPE SALAD 13 5
2791 C_RELIG ANY 14 6
2821 C_ALLERGEN PEANUT 1 1
2821 C_ALLERGEN SOY 2 2
2821 C_BRAND ROMAN HOLIDAY 1 3
2821 C_ENDUSE DINNER 1 4
如您所见,WANT_THIS 列对行进行排序并在获得新的 FORMULA_ID 时重置为 1。但我不知道如何将其转换为 UPDATE 语句,该语句实际上会将 WANT_THIS 中的值放入 ATTRIB_ORDER 列中。有没有办法将上面的 SQL 转换成 UPDATE 语句?
【问题讨论】:
标签: sql sql-server