2012-05-24 2 views
0

다른 테이블의 데이터로 deletiondate 테이블 열을 업데이트하려고했지만 "누락 된 표현식"오류가 발생합니다. 다른 사람이이 문제를 해결하도록 도와 줄 수 있습니까?누락 된 표현식을 사용하여 select 및 group을 사용하여 문 업데이트

기본적으로 테이블에서 deletiondate 열을 업데이트하려면 키 필드를 다른 테이블과 결합하고 그룹을 수행하십시오. 날짜가 01-JAN-0001이고 레코드 수가 1보다 큰 경우 01-JAN-0001을 업데이트해야합니다. 그렇지 않으면 최대 삭제 날짜 값을 업데이트해야합니다.

UPDATE 문은 내가 사용 :

update table1 db1 set deletiondate = 

SELECT 
CASE WHEN count(*)>1 and ( 
    (select 1 
    from table2 b 
    where b.loginid = a.loginid 
     and a.creationdate = b.creationdate 
     and b.deletiondate = '01-JAN-0001' 
    ) = 1) THEN '01-JAN-0001' ELSE to_char(MAX(deletiondate),'DD-MON-YYYY') END as deletiondate1 
FROM table2 a 
GROUP BY a.loginid, a.creationdate 
WHERE db1.userloginid = a.loginid and db1.usercreationdate = a.creationdate 
+0

해당 SQL에 GROUP BY가 없습니까? –

+0

@ JirkaHanika - 형식이 잘못되어 GROUP BY가 코드에서 숨겨졌습니다. – Tony

+2

'to_char'이란 무엇입니까? –

답변

1

사용이 형식 : http://www.sqlfiddle.com/#!4/c46a6/2

update product set 
    (total_qty,max_qty) = 
(
    select sum(qty) as tot, max(qty) as maxq 
    from inv 
    where product_id = product.product_id 
    group by product_id 
) ; 

샘플 데이터 :

create table product(
    product_id int primary key, 
    product_name varchar(100), 
    total_qty int, 
    max_qty int 
); 

create table inv(
    inv_id int primary key, 
    product_id int references product(product_id), 
    qty int 
); 


insert into product(product_id,product_name) 
select 1,'KB' from dual 
union 
select 2, 'MSE' from dual 
union 
select 3, 'CPU' from dual; 

insert into inv(inv_id,product_id,qty) 
select 1,1,4 from dual 
union 
select 2,2,1 from dual 
union 
select 3,3, 3 from dual 
union 
select 4,1,1 from dual 
union 
select 5,2,2 from dual 
union 
select 6,1,5 from dual; 

쿼리 출력 :

| PRODUCT_ID | PRODUCT_NAME | TOTAL_QTY | MAX_QTY | 
|------------|--------------|-----------|---------| 
|   1 |   KB |  10 |  5 | 
|   2 |   MSE |   3 |  2 | 
|   3 |   CPU |   3 |  3 |