2009-07-08 2 views
0

Google에서는 각 값의 valueid가있는 도구의 평가 값에 사용되는 표가 있습니다. 이 소위 디자인을 누가 내놓았는지 묻지는 마라.하지만 지금은 각 평가를 위해 여러 개의 값어치를 끝에 추가해야한다.n 개의 값 항목에 대해 여러 행을 삽입하는 방법

그래서, 그것은 다음과 같습니다

AssessmentId 1, ValueId 1, Value 
AssessmentId 1, ValueId 2, Value 
AssessmentId 1, ValueId 3, Value 
AssessmentId 2, ValueId 1, Value 
AssessmentId 2, ValueId 2, Value 
AssessmentId 2, ValueId 3, Value 

지금은 아마 별개의 assessmentids 반환되지 않으며 그 각각 내 행 솔직히

AssessmentId 1, ValueId 7, empty 
AssessmentId 1, ValueId 8, empty 
AssessmentId 1, ValueId 9, empty 
AssessmentId 2, ValueId 7, empty 
AssessmentId 2, ValueId 8, empty 
AssessmentId 2, ValueId 9, empty 
... 

을 추가, 나는 더이 하위 쿼리가 필요합니다 이것을 달성하는 방법을 단서. 어쩌면 그룹을 가진 subselect 일지 모르지만, 내가 선택한 insertid를 새로운 insert에 어떻게 넣을 수 있을까요?

편집 : 아니라, 실제로 우리가 각각의 평가를위한 709의 값을 가지고 지금 우리는 추가 데이터

의 끝 (24) 더 필요
foreach distinct assessmentid in table 
{ 
    insert row (assessmentid, 710, null); 
    insert row (assessmentid, 711, null); 
    ... 
    insert row (assessmentid, 733, null); 
} 

+0

같은 것을 사용하고있는 RDBMS ? – Quassnoi

+0

우리는 Oracle 10 – lostiniceland

답변

3
INSERT 
INTO i_should_really_name_the_tables_i_ask_about_on_stackoverflow_com (assessmentid, valueid) 
SELECT assessmentId, valueMax + lvl 
FROM (
     SELECT assessmentId, MAX(valueId) AS valueMax 
     FROM i_should_really_name_the_tables_i_ask_about_on_stackoverflow_com t 
     GROUP BY 
       assessmentId 
     ) a 
CROSS JOIN 
     (
     SELECT level AS lvl 
     FROM dual 
     CONNECT BY 
       level <= 24 
     ) l 
+0

을 사용하고 있습니다 만 빠른 답장을 보내 주신 데 대해 감사드립니다. 평가서를 지정하지 않아도되는 부분이 필요합니다. 각 평가에 대해 새로운 valuedids가있는 약 24 개의 행을 추가해야합니다. 이 스크립트는 나중에 프로덕션 데이터에서도 실행해야합니다. – lostiniceland

+0

ID 당 2 개의 ID와 3 개의 값이 있습니다. 어떻게 24 세는거야? 새 행을 삽입하는 알고리즘을 지정하십시오. – Quassnoi

+0

질문에 알고리즘과 비슷한 코드를 추가했습니다. – lostiniceland