2016-06-21 4 views
-1

Предположим, у меня есть таблица, которая выглядит следующим образом:Частично Отсортировать SQL таблицы в соответствии с колонкой значений

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

Tag СУБД используется. Ответ, если таковой имеется, будет, вероятно, специфичным для продукта. – jarlh

+0

Когда вы используете слово «Shuffle», люди будут думать, что вы ищете случайные результаты. То, что вы на самом деле просите, это обычай «Сортировка». – TecBrat

+0

исправлено. извините за путаницу – Bob

ответ

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 

Редактировать: Я только что видел, что вы, похоже, хотите заказать какой-то узор в столбце цвета, а не случайный. Я собираюсь оставить этот ответ в любом случае как случайный результат.

+0

Извините за путаницу, мне нужен первоначальный заказ. То есть, продукт 1 должен быть первым и т. Д. – Bob

+0

это переустановка на основе цвета – Bob

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) 
+0

Не хочет ли 1, 2, 3, 1, 2, 3 и т. Д.? – jarlh

+0

OP говорит о перетасовке :-) –

+0

Да, я знаю, но 1, 2, 3, 1, 2, 3 кажется странным случайным порядком. – jarlh

0

Похоже, работа для row_number:

SELECT product, colour, ROW_NUMBER() OVER (PARTITION BY color ORDER BY product) 
FROM TABLE 
ORDER BY 3, 2