2016-12-07 8 views
1

웹에서 내 문제점을 검색하고 일부 하위 쿼리 및 파생 테이블 접근법을 사례문으로 테스트했지만 그 결과를 얻지 못했습니다. 아마도 당신이 도울 수 있습니까? 감사.특정 조건의 테이블을 업데이트하십시오.

아래의 예는 단지 예일뿐입니다.

# generate the table as it is 
DROP TABLE IF EXISTS `IN`; 
CREATE TABLE `IN` 
(`Part` CHAR(1), 
`Warehouse` INT(1), 
`Percentage` INT(1), 
`Update` INT(1)); 

#some values for the table 
INSERT INTO `IN` 
(Part, Warehouse, Percentage) 
VALUES 
    ('A' , 1, 80), 
    ('A', 2, 100), 
    ('A', 3, 50), 
    ('B', 1, 100), 
    ('B', 2, 50), 
    ('B', 3, 100); 

# generate table as it should be 
DROP TABLE IF EXISTS `OUT`; 
CREATE TABLE `OUT` 
(`Part` CHAR(1), 
    `Warehouse` INT(1), 
    `Percentage` INT(1), 
    `Update` INT(1)); 

# values for the table 
INSERT INTO `OUT` 
(Part, Warehouse, Percentage, `Update`) 
    VALUES 
    ('A' , 1, 80, 2), 
    ('A', 2, 100, 2), 
    ('A', 3, 50, 2), 
    ('B', 1, 100, 3), 
    ('B', 2, 50, 3), 
    ('B', 3, 100, 3); 

백분율이 특정 부분에 대해 각 행에 채워 져야 창고 100

값이면 I의 특정 부분에 대한 열 Update에서 특정 하우스 이름을 추가한다.

업데이트 열의 채우기 계산은 특정 순서 여야합니다. 먼저 창고 3에 100이 있고이 값을 사용하는지 확인해야합니다. 창고 3에 50 만있는 경우 창고 2에 100이 있는지 확인하십시오.

대단히 감사합니다! 여담으로

+0

, 나는 INT 후 괄호 안의 숫자는 당신이하지 생각대로하지 않는 것으로 의심! – Strawberry

+0

그건 내가 아직도 당신이 뭘하는지 이해가 안된다고 했어. – Strawberry

+0

대부분의 경우, 우리는 어쨌든 사진을 정말로 좋아하지 않습니다. – Strawberry

답변

1

여기에 한 가지 방법은 ...

DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table 
(Part CHAR(1) 
,Warehouse INT NOT NULL 
,Percentage TINYINT NOT NULL 
); 

INSERT INTO my_table 
(Part, Warehouse, Percentage) 
VALUES 
    ('A' , 1, 80), 
    ('A', 2, 100), 
    ('A', 3, 50), 
    ('B', 1, 100), 
    ('B', 2, 50), 
    ('B', 3, 100); 

SELECT w1.*, COALESCE(w3.warehouse,w2.warehouse,w1.warehouse) warehouse 
    FROM my_table w1 
    LEFT 
    JOIN my_table w2 
    ON w2.part = w1.part 
    AND w2.warehouse = 2 
    AND w2.percentage = 100 
    LEFT 
    JOIN my_table w3 
    ON w3.part = w1.part 
    AND w3.warehouse = 3 
    AND w3.percentage = 100; 

+------+-----------+------------+-----------+ 
| Part | Warehouse | Percentage | warehouse | 
+------+-----------+------------+-----------+ 
| A |   1 |   80 |   2 | 
| A |   2 |  100 |   2 | 
| A |   3 |   50 |   2 | 
| B |   1 |  100 |   3 | 
| B |   2 |   50 |   3 | 
| B |   3 |  100 |   3 | 
+------+-----------+------------+-----------+ 
+0

좋아, 이해했다. 별칭 테이블을 사용하여 조인 조건을 지정하고 병합 용어 내에 각웨어 하우스의 올바른 순서를 가져 왔습니다. 그게 효과가있어! 그것이 성능에 부작용이 없기를 희망하지만, 나는 그것을 가질 수 없다.) 대단히 감사합니다! – Sven