Sql 按编号和行号排序行
我正在尝试构建存储过程,它将返回Crystal Reports的数据。 在CR内部,我使用多栏布局 我想得到3个布局列,如下所示:Sql 按编号和行号排序行,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我正在尝试构建存储过程,它将返回Crystal Reports的数据。 在CR内部,我使用多栏布局 我想得到3个布局列,如下所示: 1 5 8 2 6 9 3 7 10 4 1 2 3 4 5 6 7 8 9 10 但是因为CR有一些布局问题,所以它对我的表进行如下排序: 1 5 8 2 6 9 3 7 10 4 1 2 3 4 5 6 7 8
1 5 8
2 6 9
3 7 10
4
1 2 3
4 5 6
7 8 9
10
但是因为CR有一些布局问题,所以它对我的表进行如下排序:
1 5 8
2 6 9
3 7 10
4
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 fiddle示例数据和我的代码:
排序栏背后的想法:
--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
编辑:看起来您实际上想要的是
ORDER
列,而不仅仅是按该顺序返回列
SELECT ID,
CASE_ID,
DATA,
ROW_NUMBER() OVER (ORDER BY ROW, N) AS [ORDER]
FROM (
SELECT ID,
CASE_ID,
N,
ROW_NUMBER() OVER (PARTITION BY CASE_ID, N ORDER BY ID) AS ROW,
DATA
FROM (
SELECT
ID,
CASE_ID,
NTILE(3) OVER (PARTITION BY CASE_ID ORDER BY ID) AS N,
CONVERT(NVARCHAR(10), CASE_DATE,121) AS DATA
FROM DATA
WHERE CASE_ID = 1 ) X ) Y
ORDER BY ID;
订单列背后的逻辑是什么?@Ganesh_Devlekar Crystal Reports正在创建一列,然后向下创建(如顶部第二个表所示),如果我想正确显示数据,我需要以某种方式对其进行排序。其思想是将所有行分成3列,然后在它们之后取第一行,放置第二行,依此类推。对不起,我不是以英语为母语的,我不懂。为什么第二行的顺序是“5”?据我所知,您想要第二行的第一列中的值。@GordonLinoff很抱歉给您添了这么多麻烦。我在我的问题中修正了表格“…因为CR有一些布局问题…”这些布局问题是与CR忽略您的设计有关的,还是与您不知道如何让CR做蛇行列有关?因为,我添加了临时解决方案,也许这会澄清我的问题。