SQL

时间:2018-05-31 00:35:44

标签: sql sql-server

我使用的软件没有自定义行号的功能。为了解决我的问题,我必须在我的SQL上调整它并为自定义行号创建自定义列。以下是我想要的自定义行号以及我的select语句:



li{
list-style-type: none;
}

<ul>
<li>1.</li>
<li>2.</li>
<li>2.1</li>
<li>2.2</li>
<li>2.3</li>
<li>3.</li>
<li>3.1</li>
<li>3.2</li>
</ul>
&#13;
&#13;
&#13;

我正在使用Microsoft SQL Server。我尝试使用变量,但它并没有按照我想要的方式工作。这是我的错误输出示例:

SELECT chart.col1,CASE
       WHEN  chart.CHART_LEVEL <= 2 THEN @no += 1
       WHEN chart.CHART_LEVEL => 3 THEN CONCAT(@no,'.'@subNo += 1) 
       ELSE ''
END 
AS 'RowNo'
FROM myTable chart

我真的很抱歉没有提供足够的细节。

1 个答案:

答案 0 :(得分:0)

如果该表中有一个定义订单的列,则可以获取带有子查询的节号,并使用相应级别获取具有较低有序行的行数。

假设定义订单的列是id,看起来像这样的东西可能就是你想要的。

SELECT col1,
       convert(varchar(max), (SELECT count(*)
                                     FROM myTable chart1
                                     WHERE chart1.id <= chart.id
                                           AND chart1.chart_level <= 2))
       +
       CASE
          WHEN (SELECT count(*)
                       FROM myTable chart2
                            WHERE chart2.id <= chart.id
                                  AND chart2.chart_level > 2
                                  AND (SELECT count(*)
                                              FROM myTable chart3
                                              WHERE chart3.id <= chart.id
                                                    AND chart3.chart_level <= 2)
                                       = (SELECT count(*)
                                                 FROM myTable chart4
                                                 WHERE chart4.id <= chart2.id
                                                       AND chart4.chart_level <= 2)) = 0
            THEN ''
          ELSE
            '.' + convert(varchar(max), (SELECT count(*)
                                                FROM myTable chart2
                                                WHERE chart2.id <= chart.id
                                                      AND chart2.chart_level > 2
                                                      AND (SELECT count(*)
                                                                  FROM myTable chart3
                                                                  WHERE chart3.id <= chart.id
                                                                        AND chart3.chart_level <= 2)
                                                           = (SELECT count(*)
                                                                     FROM myTable chart4
                                                                     WHERE chart4.id <= chart2.id
                                                                           AND chart4.chart_level <= 2)))
       END RowNo
       FROM myTable chart;