2012-12-12 1 views
0

안녕하세요 나는 다음과 같은 테이블이 있습니다계산 열 값

내가 쿼리 또는 다음과 같은 가능한 새로운 출력 테이블이나 뷰를 작성해야
USE [dm] 
GO 

/****** Object: Table [dbo].[Demo] Script Date: 12/12/2012 08:09:31 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[Demo](
    [File] [nvarchar](50) NULL, 
    [version] [nchar](10) NULL, 
    [label] [nchar](10) NULL 
) ON [PRIMARY] 

GO 

--option A 
INSERT INTO [dbo].[Demo] 
VALUES (N'123.doc', N'1', NULL) 
INSERT INTO [dbo].[Demo] 
VALUES (N'123.doc', N'2', NULL) 
INSERT INTO [dbo].[Demo] 
VALUES (N'123.doc', N'3', N'A') 
INSERT INTO [dbo].[Demo] 
VALUES (N'123.doc', N'4', NULL) 
INSERT INTO [dbo].[Demo] 
VALUES (N'123.doc', N'5', N'B') 
GO 

(새 열 CalcVersion 통지를). 프로그래밍 언어를 사용하지 않고 어떻게 할 수 있습니까? 이 경우 결과에서

option B 
INSERT INTO [dbo].[Demo] 
VALUES (N'123.doc', N'1', N'A') 
INSERT INTO [dbo].[Demo] 
VALUES (N'123.doc', N'2', NULL) 
INSERT INTO [dbo].[Demo] 
VALUES (N'123.doc', N'3', NULL) 
INSERT INTO [dbo].[Demo] 
VALUES (N'123.doc', N'4', N'B') 

해야한다 :

File version label CalcVersion 
123.doc 1   NULL A.1 
123.doc 2   NULL A.2 
123.doc 3   A  A.3 
123.doc 4   NULL B.1 
123.doc 5   B  B.2 

또 다른 가능한 시나리오는 이것이다

File version label CalcVersion 
123.doc 1   A  A.1   
123.doc 2   NULL B.1 
123.doc 3   NULL B.2 
123.doc 4   B  B.3 

은 알려 주시기 바랍니다. 감사합니다. 내가 생각

답변

0

나는 그것을 이동 :

UPDATE demo set ver =(
     (SELECT TOP 1 label FROM demo t WHERE t.[file] = pt.[file] 
     and cast(t.[version] as int) > cast(pt.[version] as int) 
      AND t.label is NOT NULL 
     ORDER BY pt.[version] asc)) from demo pt 
where pt.label is NULL; 

다음과 같이 순위로를 연결하여보다 :

select *,  ver + '.' + cast(RANK() over (partition by [file] order by version asc) as 
varchar(10)) as ver from demo where label is null;