2013-07-05 2 views
1

다음 작업을 수행 할 수 있는지 궁금합니다. 성 및 이름의 데이터베이스를 가지고 있는데 결과가 firstname.lastname이거나 firstname.lastname이 이미 반환되도록 쿼리하려고합니다. firstname.lastname1이어야합니다 (또는 firstname.lastname1 인 경우 2). 이미 반환되었습니다 등). 그래서 다음과 같은 테이블을 쿼리 :중복시 SQL SELECT의 자동 증가 값

| ID | Firstname | Lastname | 
| 1 |  John | Smith | 
| 2 |  John | Smith | 
| 3 |  Jane |  Doe | 

John.Smith 
John.Smith1 
Jane.Doe 

데이터베이스는 MSSQL 서버 2008 어떤 도움을 주시면 감사하겠습니다에 존재 반환합니다. 감사! 나는 이것이 '첫 번째 사람의 이름 끝에'0 (또는 사람을 추가합니다 생각 제외하고이

SELECT FirstName + '.' + LastName + 
    CAST(ROW_NUMBER() OVER(PARTITION BY FirstName, LastName ORDER BY ID) As Varchar(9)) 
FROM YourTable 

답변

2
SELECT 
    FirstName + '.' + LastName 
     + IsNull(cast(NullIf(ROW_NUMBER() OVER(PARTITION BY FirstName + '.' + LastName ORDER BY ID) - 1, 0) as varchar(10)), '') 
FROM 
    TableName 
+0

그거야! 고맙습니다!!! – SElaschuk

1

이, 그것은

SELECT 
CASE WHEN Seq = 1 THEN Firstname + '.' + Lastname 
    ELSE Firstname + '.' + Lastname + CAST(ID AS VARCHAR) 
END As Name 
FROM (
    SELECT ID, Firstname, Lastname, 
    ROW_NUMBER() OVER (PARTITION BY Firstname, Lastname ORDER BY ID) As Seq 
    FROM Sometable 
) tbl 
+0

아주 가까이해야 누가 그 문제에 대해 중복되지 않습니다) –

+0

고마워! 그것은 꽤 가까이에 도착하지만, 그것은 중복되지 않더라도 여전히 번호를 추가합니다. 중복 된 경우에만 추가 할 수있는 방법이 있습니까? – SElaschuk

0

처럼

+0

시도해 보면 구문 오류가 발생합니다. http://sqlfiddle.com/#!3/77f0e/1 – SElaschuk

+0

@SElaschuk - 맞습니다 - 해결할 내 대답을 편집했습니다. –