SQL中的自定义行号

Posted

技术标签:

【中文标题】SQL中的自定义行号【英文标题】:Custom row number in SQL 【发布时间】:2018-05-31 00:35:44 【问题描述】:

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

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>

我正在使用 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

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

【问题讨论】:

什么是数据库?该解决方案高度依赖于数据库的具体情况。 哪个数据库?你的“创建表”语句是什么? 当您添加 SQL 标签时,您会看到一条大消息,建议您还为正在使用的特定 DBMS 添加标签,因为它们之间的功能和语法各不相同。尽管如此,您还是选择忽略该建议而不这样做,这意味着您延迟了获得答案的机会,并可能浪费了那些试图帮助您的人却发现它在您的 DBMS 中不起作用的时间。请edit您的问题并添加该标签,并注意您将来收到的建议。我们制作它们不仅仅是为了占用屏幕空间。 你有没有想过用css计数器来做列表结构?请参阅此处的示例:***.com/questions/4098195/… 对不起,但我想使用 SQL 作为列的一部分输出它。 【参考方案1】:

如果您在该表中有一个定义顺序的列,您可以使用子查询获取节号,这些子查询会获取具有相应级别的较低排序行的行数。

假设定义订单的列是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;

【讨论】:

以上是关于SQL中的自定义行号的主要内容,如果未能解决你的问题,请参考以下文章

sql server 中的自定义函数应该如何调用?

元数据库中的 SQL 自定义过滤器不显示使用 [[ ]] 的自定义字段

Hibernate中的自定义类型——UserTypeCompositeUserType

SQL Server 中的自定义排序

带有spring-boot的自定义sql中的Liquibase参数

SQL Server Management Studio 中的自定义分隔符不起作用