2013-05-08 2 views
3

안녕하세요, 열의 이름이 고유 한 경우 1을 반환하는 SQL 함수를 만들려고합니다. 그렇지 않으면 해당 이름이 고유하지 않으면 1 증가분을 반환합니다.SQL return incremented number

NAME | Number 
A | 1 
B | 1 
C | 1 
C | 2 
C | 3 
D | 1 
E | 1 

문제는 내가 증가하는 숫자를 얻는 것입니다. 이 SQL 서버의 경우

+0

파티션 ROW_NUMBER()를 사용하여 SQL 서버, Oracle, MySQL, ...? 정말로 함수를 원하십니까? 아니면 쿼리에서이 함수가 필요합니까? –

+0

죄송합니다. SQL Server 2008이라고 말하면 안됩니다. – user2164702

답변

7

ANSI의 SQL :

select name, 
     row_Number() over (partition by name order by name) as number 
from your_table 
+0

이 작업은 오류가 발생하여 null로 변경해야했습니다. Windowed 함수 상수를 ORDER BY 절 표현식으로 지원하지 않습니다. ' – user2164702

+1

@ user2164702 : 의견에 감사드립니다. SQL Server의 한계를 항상 잊어 버렸습니다. –

2
CREATE TABLE #TEST (NAME CHAR(1)) 

INSERT INTO #TEST 
SELECT 'A' 
UNION ALL 
SELECT 'A' 
UNION ALL 
SELECT 'B' 
UNION ALL 
SELECT 'B' 
UNION ALL 
SELECT 'B' 
UNION ALL 
SELECT 'C' 
UNION ALL 
SELECT 'D' 

SELECT NAME, ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY NAME) AS Number 
FROM #TEST 
+0

http://sqlfiddle.com/#!3/ba610/1 – MrSimpleMind