2013-01-09 12 views
5

Tôi quan tâm đến việc đưa ra tuyên bố trường hợp kéo giá trị từ hai cột khác nhau, một trong số đó có tính toán liên quan .. Tôi không chắc chắn cách thực hiện công việc này nhưng tôi sẽ chỉ cho bạn những gì tôi có cho đến nay. (Tôi có một cột hiển thị Item Type cho các mục Order Special Item, các Item và Item không được lưu trữ thường được thả. Và cột thứ hai hiển thị Số lượng trên tay - Số lượng trên đơn đặt hàng để xác định xem món hàng có trong kho hay không.) truy vấn của tôiTuyên bố Mysql CASE nhiều cột

SELECT ItemID, ItemType, (QuantityOnHand - QuantityonSalesOrders) AS Instock 
CASE 
WHEN ItemType = 'SP/OR' THEN 'Special Order' 
WHEN Instock < '1' THEN 'Out of Stock' 
WHEN Instock > '0' THEN 'In Stock' 
AS "Stock" FROM peachtree; 

Trả lời

8

Đối với loại yêu cầu này, bạn sẽ phải sử dụng lại tính toán hoặc sử dụng truy vấn phụ. Điều này là do bí danh mà bạn đang đưa ra giá trị Instock không có sẵn để sử dụng trong danh sách lựa chọn:

SELECT ItemID, 
    ItemType, 
    Instock, 
    CASE 
     WHEN ItemType = 'SP/OR' THEN 'Special Order' 
     WHEN Instock < '1' THEN 'Out of Stock' 
     WHEN Instock > '0' THEN 'In Stock' 
    END AS "Stock" 
FROM 
(
    select ItemID, ItemType, (QuantityOnHand - QuantityonSalesOrders) AS Instock 
    from peachtree 
) p; 

Hoặc:

SELECT ItemID, 
    ItemType, 
    (QuantityOnHand - QuantityonSalesOrders) as Instock, 
    CASE 
     WHEN ItemType = 'SP/OR' THEN 'Special Order' 
     WHEN (QuantityOnHand - QuantityonSalesOrders) < '1' THEN 'Out of Stock' 
     WHEN (QuantityOnHand - QuantityonSalesOrders) > '0' THEN 'In Stock' 
    END AS "Stock" 
FROM peachtree 
+0

gì nếu cột trường hợp dựa trên được sử dụng trong một mệnh đề WHERE ? Bất kỳ cách nào để cải thiện hiệu suất của nó với nhiều hàng (tức là chỉ mục)? – watery

+0

@watery Có, việc sử dụng các chỉ mục có thể giúp thực hiện. Bạn sẽ phải thử nghiệm nó trên hệ thống của bạn mặc dù. – Taryn

Các vấn đề liên quan