2012-12-12 93 views
2

我實際上運行的是oracle,但是當我將示例複製到sqlfiddle時,如果我選擇了oracle而不是mysql,那麼它不會運行,也許oracle的小提琴版本是與我的不同。 http://www.sqlfiddle.com/#!2/44933/1SQL:創建一個基於日期創建位置的視圖

CREATE TABLE Positiontest(
ID VARCHAR(20), 
code CHAR(06), 
registrationdate DATE, 
PRIMARY KEY(ID,code) 
); 

INSERT INTO Positiontest VALUES('01','COM002','2012-12-11'); 
INSERT INTO Positiontest VALUES('02','COM002','2012-12-12'); 
INSERT INTO Positiontest VALUES('01','COM003','2012-12-11'); 

這給了我positiontest表:

ID  CODE  REGISTRATIONDATE 
    01  COM002 2012-12-11 
    02  COM002 2012-12-12 
    01  COM003 2012-12-11 

我想建立這樣一個觀點:

ID  CODE  POSITION 
    01  COM002 1 
    02  COM002 2 
    01  COM003 1 

的順序並不重要,aslong因爲 是每個代碼的唯一位置。

+1

因爲你是靠隱式數據類型轉換''2012-12-11''它不能在SQLFiddle工作不是一個日期,但一個字符文字,根據語言環境設置進行轉換。如果你使用日期字面量或to_date()函數,它會工作,例如:http://www.sqlfiddle.com/#!4/6d3f9 –

+0

不知道,謝謝:) – Pro9

回答

1

你想要的row_number()功能:

select pt.*, 
     row_number() over (partition by code order by code) as Position 
from PositionTest pt 
+0

工作很好,謝謝:) – Pro9

1
SELECT ID, code, ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY CODE) 
FROM Positiontest 
+0

工作很好,謝謝:) – Pro9