Я пытаюсь создать хранимую процедуру, которая вернет данные для отчета Crystal Reports. Внутри CR Я использую расположение нескольких столбцов.Заказывать строки по ntile и row_number
Я хочу, чтобы получить 3 макета колонки что-то вроде этого:
1 5 8
2 6 9
3 7 10
4
Но поскольку CR имеет некоторые проблемы компоновки он заказывает мой стол, как это:
1 2 3
4 5 6
7 8 9
10
Так я пытался создайте процедуру, которая вернет дополнительный столбец, по которому я буду сортировать свои данные.
Таким образом, вместо того, 1,2,3,4- мне нужно 1,4,7,10,2,5,8,3,6,9 ...
У меня есть таблица с этими данными:
ID | CASE_ID | CASE_DATE
--------------------------
1 | 1 | 2014-02-03
2 | 1 | 2014-02-04
3 | 1 | 2014-02-05
4 | 1 | 2014-02-06
5 | 1 | 2014-02-07
6 | 1 | 2014-02-08
7 | 1 | 2014-02-09
8 | 1 | 2014-02-10
9 | 1 | 2014-02-11
10 | 1 | 2014-02-12
и мне нужно хранимую процедуру, которая будет возвращать эти данные:
ID | CASE_ID | CASE_DATE | ORDER
---------------------------------
1 | 1 | 2014-02-03 | 1
2 | 1 | 2014-02-04 | 5
3 | 1 | 2014-02-05 | 8
4 | 1 | 2014-02-06 | 2
5 | 1 | 2014-02-07 | 6
6 | 1 | 2014-02-08 | 9
7 | 1 | 2014-02-09 | 3
8 | 1 | 2014-02-10 | 7
9 | 1 | 2014-02-11 | 10
10 | 1 | 2014-02-12 | 4
Вот SQL скрипку с данными выборки и мой код: http://sqlfiddle.com/#!3/c24c1/1
Идея колонки сортировки:
- делят все строки на 3 группы (NTILE), принять первый элемент из первой группы, то сначала из второй и первой из третьей группы
РЕДАКТИРОВАТЬ: Здесь мое временное решение, я надеюсь, что запуск этого будет уточнить, что я имел в виду, когда я задаю этот вопрос:
--DECLARE @NUM INT;
--SET @NUM=3;
SELECT ID,
CASE_ID,
CONVERT(NVARCHAR(10),CASE_DATE,121) AS DATA,
(ROW1 - 1) * 3/*@NUM*/ + COL AS [ORDER]
FROM
(SELECT CASE_ID,
ID,
ROW AS LP,
COL,
ROW_NUMBER() OVER (PARTITION BY CASE_ID, COL ORDER BY ROW) AS ROW1,
CASE_DATE
FROM
(SELECT ROW_NUMBER() OVER (PARTITION BY D.CASE_ID ORDER BY D.ID) AS ROW,
NTILE(3/*@NUM*/) OVER (PARTITION BY D.CASE_ID ORDER BY D.ID) AS COL,
ID,
D.CASE_ID,
CASE_DATE
FROM DATA D
WHERE D.CASE_ID = 1)X)Y
ORDER BY Y.CASE_ID,
LP
что логика колонке заказа ?? –
@Ganesh_Devlekar Crystal Reports создает столбец поперек вниз (как показано во второй таблице, сверху), если я хочу правильно отображать данные. Мне нужно как-то заказать его. Идея состоит в том, чтобы разделить все строки на 3 столбца, а затем взять первую строку после того, как они помещают вторую строку и так далее. Извините, но я не говорю по-английски. – Misiu
Я не понимаю. Почему вторая строка дает заказ «5»? Из того, что я могу сказать, вам нужно значение в первом столбце второй строки. –