使用 Row_number() OVER(partition BY..) 以及声明局部变量
Posted
技术标签:
【中文标题】使用 Row_number() OVER(partition BY..) 以及声明局部变量【英文标题】:Using Row_number() OVER(partition BY..) along with declaring local variables 【发布时间】:2015-03-17 08:12:36 【问题描述】:我有一个 sql 查询,在这个 sql 查询中,我想选择不同的列,而不管列在前。对于其他 sql 查询,我使用 Row_number() OVER(partition BY..) 并且我还需要使用内部联接。我想在其中使用 row_number 和内部联接的查询是 -
DECLARE @columns NVARCHAR(MAX)
DECLARE @params NVARCHAR(MAX) = '@columns NVARCHAR(MAX) OUTPUT'
DECLARE @sql NVARCHAR(MAX) = 'SELECT @columns = STUFF(
(
SELECT '',''+ [column_name] FROM information_schema.columns
WHERE (table_schema = ''dbo''
AND table_name = ''main_mps_dqs_analog'')
AND (ordinal_position <= 73) FOR XML PATH('''')),1,1,'''')'
EXEC sp_executesql @sql, @params, @columns OUTPUT
SET @sql = 'SELECT '+ @columns + ' FROM dbo.main_mps_dqs_analog WHERE logtime BETWEEN ''2014-10-10 07:17:00'' AND ''2014-10-10 08:47:00'''
EXEC(@sql)
我想用INDUS2_BDS.dbo.ddtable
应用这个表的内部连接,我想这个INDUS2
数据库表的beam_current
和logtime
以及如何在这个查询中应用分区BY beam_current
。
【问题讨论】:
您想在动态 sql 中添加内部联接和 row_number 吗?但是你想 PARTITION BY 什么列?您没有提供足够的信息来获得实际帮助... PRINT @sql 而不是执行来查看您尝试执行的查询和 Google ROW_NUMBER 【参考方案1】:SET @sql = 'SELECT ' + @columns + ' ,AnotherTable.beam_current, RowNumber() Over(Partition By SomeColumn Order By SomeColumn) AS Rn
FROM dbo.TableName join AnotherTable on TableName.SomeColumn = AnotherTable.SomeColumn
WHERE logtime BETWEEN ''2014-10-10 07:17:00'' AND ''2014-10-10 08:47:00'''
我在 Giorgi 的帮助下通过这个 sql 查询解决了这个问题
【讨论】:
以上是关于使用 Row_number() OVER(partition BY..) 以及声明局部变量的主要内容,如果未能解决你的问题,请参考以下文章
使用 Row_number() OVER(partition BY..) 以及声明局部变量
ROW_NUMBER() OVER()函数用法;(分组,排序),partition by