我可以选择按字段排序的数据,使其在连续行中的值不同吗?

时间:2015-07-20 07:44:26

标签: sql-server

我有一个包含制造商字段的产品表,我需要提取数据,以便两个具有相同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)的数据。

2 个答案:

答案 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