2016-03-07 42 views
0

我無法爲涉及row_number()的查詢創建視圖。無法爲涉及db2中的row_number()函數的查詢創建視圖

舉個例子,我有一個列ID的示例表。當我嘗試以下面的方式創建視圖時,它會給出錯誤。

create or replace view sample_view 
(
    ID 
) 

AS 
select Id from (
    select Id,row_number() over (partition by id) as rownum 
    from sample 
    where rownum =1) 

錯誤消息:沒有命名類型 「FUNCTION」 的 「ROW_NUMBER」 具有兼容參數的授權程序被發現.. SQLCODE = -440, SQLSTATE = 42884,DRIVER = 53年4月16日

不知道爲什麼在創建視圖被拋出這個錯誤,但是當我嘗試運行此查詢:

select Id from (
    select Id,row_number() over (partition by id) as rownum 
    from sample 
    where rownum =1) 

它變得成功執行。

+0

將rownum移動到外部查詢後,仍然收到相同的錯誤。 –

回答

1

where雲在外部查詢,而不是子查詢:

select Id 
from (select Id, row_number() over (partition by id order by <something goes here>) as rownum 
     from sample 
    ) s 
where rownum = 1; 

我假設你有更復雜的代碼,因爲查詢更方便地寫爲:

select distinct Id 
from sample; 

編輯:

DB2也支持fetch first 1 row only,這可能對此更簡單:

select Id 
from sample 
order by <something usually goes here> 
fetch first 1 row only; 
+0

是的,我有更復雜的查詢。仍然我移動where子句後出現一些錯誤外部查詢..不知道 –

+0

對不起,我的意思是,我得到同樣的錯誤信息.. –

+0

我認爲你只是缺少'order by'子句,這是'row_number( )'(至少在大多數數據庫中)。 –