【问题标题】:Nested select query in sql serversql server 中的嵌套选择查询
【发布时间】:2014-07-23 20:06:27
【问题描述】:

我正在将我的数据库从 Oracle 迁移到 Sql Server。 我的表定义如下(在 MS SQL Server 2012 中):

CREATE TABLE DEMO_TABLE(
ID BIGINT IDENTITY(1,1) NOT NULL,
COLUMN_1 BIGINT NULL,
COLUMN_2 VARCHAR(256) DEFAULT NULL,
DATE_CREATED DATETIMEOFFSET DEFAULT SYSDATETIMEOFFSET() NULL,
OPERATIONS NUMERIC(10,0) DEFAULT 0 NULL,
CONSTRAINT PK_DEMO_TABLE PRIMARY KEY (ID)
)

效果很好。 现在,我在 Oracle 中有一条 select 语句如下:

select * from (select 
            COLUMN_1,
            COLUMN_2,
            DATE_CREATED,
            OPERATIONS,
            SYSTIMESTAMP,
            row_number()
        over (order by date_created DESC) rn 
        from 
            DEMO_TABLE 
        where 
            COLUMN_1 = 3 AND 
            OPERATIONS IN 
            (1,2,3,4)
            AND COLUMN_2='sometext'
            AND DATE_CREATED <= SYSTIMESTAMP        
        ) where rn between 1 and 100 order by rn

我在将此 select 语句从 Oracle 转换为 SQL Server 时遇到问题。 此查询在 Oracle 中运行良好,但在 SQL Server 中出现以下错误:

Msg 156, Level 15, State 1, Line 17 Incorrect syntax near the keyword 'where'.

我无法弄清楚这里有什么问题。请帮忙!

【问题讨论】:

  • 您在问题标题中有 SQL Server 但标记了 Oracle、MySQL?
  • @MurDeR 是的,因为我认为查询中可能存在一些逻辑问题,这与我使用的服务器无关。

标签: mysql sql sql-server oracle tsql


【解决方案1】:
select * from 
(select 
            COLUMN_1,
            COLUMN_2,
            DATE_CREATED,
            OPERATIONS,
            SYSTIMESTAMP,
            row_number()
        over (order by date_created DESC) rn 
        from 
            DEMO_TABLE 
        where 
            COLUMN_1 = 3 AND 
            OPERATIONS IN 
            (1,2,3,4)
            AND COLUMN_2='sometext'
            AND DATE_CREATED <= SYSTIMESTAMP        
        ) r
        where r.rn between 1 and 100 order by r.rn

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 2022-01-23
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多