基于 ROW_Number 的 SQL 查询不起作用

标签 sql sql-server t-sql analytic-functions

基本上,我正在尝试对仅包含图像的页面进行查询。我需要提供 tripID 号,然后提供 ROWID(因为可能有多个图像)才能接收单个图像。我将循环直到每个图像都位于 html 中相应的图像框中。

这段代码似乎不起作用(我得到无效的列名'ROWID'),但是如果我删除AND ROWID='1',它会返回所有图像及其行ID,如下所示:

ROWID      PHOTO
    1      32jjr3h2jh23hj4h32jh42ll23j42 
    2       HU8308DJAOID9ASIDJI32C89EE29

-

Select ROW_NUMBER() OVER (ORDER BY Photo ASC) AS ROWID, TBL_Photo.Photo
        From TBL_Photo
        left join TBL_TripDetails
        ON TBL_Photo.TripID=TBL_TripDetails.pkiTripID
        Where pkiTripID = '121' AND ROWID = '1'

最佳答案

您不能在 WHERE 子句中引用列别名 - 您需要使用子查询或 CTE:

子查询示例:

SELECT x.rowid,
       x.photo
  FROM (SELECT ROW_NUMBER() OVER (ORDER BY p.photo) AS ROWID, 
               p.photo
          FROM TBL_PHOTO p
     LEFT JOIN TBL_TRIPDETAILS td ON td.pkitripid = p.tripid 
         WHERE td.pkiTripID = '121') x
 WHERE x.rowid = 1

CTE 示例:

WITH example AS (
        SELECT ROW_NUMBER() OVER (ORDER BY p.photo) AS ROWID, 
               p.photo
          FROM TBL_PHOTO p
     LEFT JOIN TBL_TRIPDETAILS td ON td.pkitripid = p.tripid 
         WHERE td.pkiTripID = '121')
SELECT x.rowid,
       x.photo
  FROM example x
 WHERE x.rowid = 1

性能

这两个选项之间没有性能差异,但并非所有数据库都支持WITH 语法。

关于基于 ROW_Number 的 SQL 查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4218367/

相关文章:

SQL 通过连接表从其他表中选择总和作为列

sql-server - SQL Server Management Studio - 串行运行多个存储过程

sql - 使用 SQL + XQuery 将 Xml 转换为基于列的数据

sql - Access 关系问题导致数据未提取到正确的表

sql - 如何找到购买产品 A 和 D 的客户间隔 > 6 个月?

mysql - 仅当用户存在两种方式关系时才选择sql

mysql:选择最后 10 条消息,并为每条消息选择最后 3 条回复

c# - 确保两台计算机运行相同版本的应用程序

sql - 如何获取 ROW_NUMBER() 的替代值?

sql - 查找/创建一系列跟踪记录的正确结束日期