Sql server 我是否可以选择按字段排序的数据,使其在连续行中的值不同?
我有一个带有制造商字段的产品表,我需要提取数据,这样两个具有相同id的制造商就不会呆在一起了。 例如: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 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没有提到这个列的存在,只是他希望数据按那个顺序显示。我最终得到了它。哇!你太棒了!:)