假设我有一个如下所示的表:
product, color
1, 1
2, 1
3, 1
4, 2
5, 2
6, 2
7, 3
8, 3
是否可以重新排列表格,以便按颜色重新排列产品?例如,在这种情况下答案是:
product, color
1, 1
4, 2
7, 3
2, 1
5, 2
8, 3
2, 1
6, 2
3, 1
答案 0 :(得分:0)
当然,您可以通过NEWID()
订购让我们制作测试数据;
IF OBJECT_ID('tempdb..#TestData') IS NOT NULL DROP TABLE #TestData
GO
CREATE TABLE #TestData (product int, colour int)
INSERT INTO #TestData (product, colour)
VALUES
(1,1)
,(2,1)
,(3,1)
,(4,2)
,(5,2)
,(6,2)
,(7,3)
,(8,3)
然后对此运行查询;
SELECT
product
,colour
FROM #TestData
ORDER BY NEWID()
这给出了这样的数据的随机顺序;
product colour
4 2
1 1
5 2
7 3
6 2
3 1
2 1
8 3
编辑:我刚刚看到您似乎想要在颜色列中使用某种模式订购,而不是随机。无论如何,我将把这个答案留作随机结果。
答案 1 :(得分:0)
我会选择一个随机数作为第三列,并按该随机数排序。在伪代码中:
SELECT PRODUCT,
COLOR,
RANDOM_NUMBER()
FROM YOUR_TABLE
ORDER BY 3
随机数的生成取决于您的数据库。在Oracle中,它将是dbms_random.random
。
您可以通过从表中重新选择来删除随机数:
SELECT PRODUCT,
COLOR
FROM (SELECT PRODUCT,
COLOR,
RANDOM_NUMBER()
FROM YOUR_TABLE
ORDER BY 3)
答案 2 :(得分:0)
听起来像row_number的工作:
SELECT product, colour, ROW_NUMBER() OVER (PARTITION BY color ORDER BY product)
FROM TABLE
ORDER BY 3, 2