2014-06-10 4 views
0

행 번호를 사용하여 일부 열을 그룹화하여 할당했습니다. 기본적으로 아래와 같이 쿼리합니다.마지막 번호부터 row_number?

update product set row_number= CONVERT(nvarchar(255), (ROW_NUMBER() over (partition by product.groupID order by product.groupID))) 

하지만 이제는 신제품이 있으며 row_number (null)가 없습니다. 나는 모든 row_numbers를 재 할당 할 수 없다. 마지막 번호를 사용하여 null 값을 계속 할당하고 싶습니다. tsql으로 어떻게 할 수 있습니까?

기본적으로 아래의 표 표를 참조하십시오. D 4 받아야, G는 3 가야 및 H 1.

product row_number groupID 
    A   1   1 
    B   2   1 
    C   3   1 
    D  null  1 
    E   1   2 
    F   2   2 
    G  null  2 
    H  null  3 
+0

파티션? –

+0

백그라운드에서이 테이블의 이름을 바꿀 수 있으며, 업데이트 폼이 새 테이블 이름을 가리키고이 테이블 이름을 ROW_NUMBER() OVER (PARTITION BY product.groupID ORDER BY product.product)를 사용하는보기로 바꿀 수 있습니까? 이 row_number 열? –

+0

@hamlet : 주문에 영향을받지 않는 주문이 쿼리에 영향을 미쳤다고 생각합니다. 그러나 파션은 내가 믿는 일종의 그룹핑입니다. 나는 google에 대한 나의 연구 후에이 사용법을 보았다. 어쨌든이 운동은 처음에는 나에게 좋았어. 그것은 내 원래의 질문에 관련이 없다 – batmaci

답변

1

행 번호를 생성하는 CTE를 만든 다음 product CTE의 결과가있는 테이블. ** product.groupID **에 의해 product.groupID 순서에 의해

;with cte(product, groupId, newRowNumber) 
as(
select product, groupId, ROW_NUMBER() over (partition by product.groupID order by product.groupID, product.product) 
from product 
) 

update product 
set row_number = newRowNumber 
from cte 
where cte.groupId = product.groupId 
and cte.product = product.product 
and product.row_number is null 

SQL Fiddle

+0

Jerrad에게 고마워, 정말 나를 위해 작동 :) – batmaci

0

이것을 시도되어야한다 : 같은리스트

(ID를 선택 ** 그룹 ID 순서에 의해 (분할하여 위에 ROW_NUMBER() groupid)을 제품에서 rn으로 사용) 업데이트 제품 세트 dbo.product.row_number = CONVERT (nvarchar (255), list.rn) 목록에서 내부 조인 dbo.product list.ID = dbo.product.ID **