2012-11-19 9 views
2

두 개의 테이블 VariablesProcesses이 있습니다.
INSERT INTO SELECT CASE을 구현하고 싶지만 이전에는 해 본 적이 없습니다.INSERT INTO SELECT CASE

데이터는 항상 Variables에서 Processes으로 변경됩니다. 그러나 어떤 열을 모르겠습니다.

Variable_ID
Set_To_Value_ID
Set_To_Variable_ID
Changed_In_SP
:

Variables 아래 표는 열이 예


첫 번째 열은 항상 Processes 테이블에 복사됩니다.
Set_To_Value_ID, Set_To_Variable_ID, Changed_In_SP, Comment_Input은 하나만 값을 가질 수 있기 때문에 SELECT CASE이 필요합니다. 행에있는 세 개의 열은 항상 널입니다. 무엇이든간에 열이 null은 Processes 테이블에 삽입해야되지 않습니다

Processes 테이블 :

Process_ID
Variable_ID
Value_ID - (Set_To_Value_ID은 간다)
Manual_Value - (Set_To_Variable_ID, Changed_In_SP또는Comment_Input 여기에 표시)

Variable_ID_To_ChangeVariable_ID입니다.

진행 방법?
감사합니다.

답변

3

Value_ID - (Set_To_Value_ID가 간다) Manual_Value

Set_To_Variable_ID, Changed_In_SP 또는 Comment_Input는

당신은 그래서 같은 COALESCE 표현을 사용할 수 있습니다) 여기 간다 :

INSERT INTO Processes 
SELECT 
    Set_To_Value_ID, 
    COALESCE(Set_To_Variable_ID, Changed_In_SP, Comment_Input) 
FROM Variables 

업데이트 : 글쎄, 당신은 COALESCE을 사용할 수 없으므로 이를 위해 CASE 표현식을 사용하여 정규식을 작성하는 방법은 다음과 같습니다.

INSERT INTO Processes 
SELECT 
    Set_To_Value_ID, 
    CASE 
    WHEN Set_To_Variable_ID IS NOT NULL THEN Set_To_Variable_ID 
    WHEN Changed_In_SP IS NOT NULL THEN Changed_In_SP 
    WHEN Comment_Input IS NOT NULL THEN Comment_Input 
    END 
FROM Variables 
+0

감사합니다.하지만 COALESCE는 사용할 수 없습니다.그 이유는 선택한 열에 따라 완전히 다른 테이블의 다른 값이 Manual_Value 필드로 갈 수 있기 때문입니다. SELECT CASE 메서드를 구현하여 필드에 무엇이 들어가는지를 명시 적으로 결정할 수있었습니다. – hermann

+0

@hermann - 편집을 참조하십시오. –