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

Sql server 我是否可以选择按字段排序的数据,使其在连续行中的值不同?,sql-server,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 在上面的示例中,如果序列中的id具有相同的邻居(300-400-300),则没有太大关系,但更有趣的是,可以看到更复杂的逻辑,以便

我有一个带有制造商字段的产品表,我需要提取数据,这样两个具有相同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
在上面的示例中,如果序列中的id具有相同的邻居(300-400-300),则没有太大关系,但更有趣的是,可以看到更复杂的逻辑,以便单个id只有一个相同类型的邻居id(300-400-500)。 如果无法应用这种排序-使用相同的连续值(300-300-300)显示数据。

尝试此操作

;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
像这样的

SELECT Row_number()OVER(partition BY manf_id ORDER BY id) rn, *
FROM   Yourtable
ORDER  BY rn,id 

我认为ID列实际上是由
行编号()生成的,或者应该生成以匹配这些规则。@RaduGheorghiu在
行编号中
将显示三个
1
first@RaduGheorghiu-不,这就是为什么
Id
被包含在
orderby
中的原因。我不是问为什么它被包含在
orderby
中,我是说OP没有提到这个列的存在,只是他希望数据按那个顺序显示。我最终得到了它。哇!你太棒了!:)