Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按编号和行号排序行_Sql_Sql Server_Tsql_Sql Server 2012 - Fatal编程技术网

Sql 按编号和行号排序行

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

我正在尝试构建存储过程,它将返回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   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示例数据和我的代码:

排序栏背后的想法:

  • 将所有行分成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
    

    编辑:看起来您实际上想要的是
    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做蛇行列有关?因为,我添加了临时解决方案,也许这会澄清我的问题。