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 自定义过滤器不显示使用 [[ ]] 的自定义字段
Hibernate中的自定义类型——UserTypeCompositeUserType