我在报告中要求在行中显示备用颜色,为此我需要在SQL Select语句中生成序列号(请参阅下面的示例),以便稍后在显示行时使用。 我正在尝试row_number和其他一些不起作用的技术。这不应该使用脚本完成,我应该能够在Select语句中生成。感谢任何帮助。
RowNumber - 1, Otherdata - Something1
RowNumber - 2, Otherdata - Something2
RowNumber - 3, Otherdata - Something3
RowNumber - 4, Otherdata - Something4
RowNumber - 5, Otherdata - Something5
答案 0 :(得分:10)
如果您的数据库支持分析函数,则无需避免使用分析函数,例如ROW_NUMBER()
SELECT
ROW_NUMBER() OVER (ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) AS Number
FROM
[<TABLE_NAME>]
语法为Func([ arguments ]) OVER (analytic_clause)
,您需要关注OVER()。最后一个括号创建行的分区,并逐个在这些分区上应用Func()。在上面的代码中,我们只有一组行/分区。因此,生成的序列适用于所有行。
您可以制作多组数据,并在一次运行中为每个数据生成序列号。例如,如果您需要为具有相同categoryId的所有行集生成序列号。您只需要像Partition By
一样添加(PARTITION BY categoryId ORDER BY [<PRIMARYKEY_COLUMN_NAME>])
子句。
请记住,在FROM
之后,您还可以使用另外一个ORDER BY
来对数据进行不同的排序。但它对OVER()
答案 1 :(得分:2)
如果sort列包含唯一值,则还可以在没有新的内置Row_Number()函数的情况下使用基于排序列的子查询来执行此操作。
Select [other stuff],
(Select count(*) From table
where sortCol < a.sortCol) rowNum
From table a
Order by sortCol
将<
更改为<=
以从1开始计数而不是0