我有一个包含制造商字段的产品表,我需要提取数据,以便两个具有相同ID的制造商不会保持在一起。 例如:
id prod_id manf_id
1 100 300
2 101 300
3 102 400
4 103 400
5 103 500
所以结果看起来像是:
1 100 300
3 102 400
5 103 500
2 101 300
4 103 400
在上面的例子中,如果有具有相同邻居(300-400-300)的id的序列并不重要,但是看到更复杂的逻辑会更有趣单个id只有一个相同类型的邻居id(300-400-500)。 如果无法应用此类排序 - 显示具有相同连续值(300-300-300)的数据。
答案 0 :(得分:1)
试试这个。
;with cte as (
select id,prod_id,manuf_id,ROW_NUMBER() over(partition by manuf_id order by id) as row_no
from products
)
select id,prod_id,manuf_id from cte
order by row_no
答案 1 :(得分:1)
像这样。
SELECT Row_number()OVER(partition BY manf_id ORDER BY id) rn, *
FROM Yourtable
ORDER BY rn,id