使用case时,操作数应包含1列sql

时间:2014-09-16 17:16:46

标签: php sql

SELECT o.rfq_id, s.name, m.manufacturers_name, o.ship_address, o.serial, o.model, d.part_type,        d.description, d.part_number, d.subs, d.qty, o.notes, d.action, d.vendor, d.pt, d.price2, d.buy, d.notes1, o.tracking_number, o.date_shipped, o.expected_date, o.po_no, o.issue_no, o.date_added, 
       CONCAT_WS(' ', c.customers_lastname, c.customers_firstname) AS customer_name,
       c.customers_email_address,
       CASE
           WHEN o.ship_address = 0 THEN (a.entry_street_address,
                                         a.entry_state)
           WHEN o.ship_address = 1 THEN (p.street_address,
                                         p.state)
       END AS Address
FROM rfq_order o
JOIN rfq_order_detail d ON o.rfq_id = d.rfq_id
JOIN customers c ON o.customer_id = c.customers_id
JOIN address_book a ON c.customers_id = a.customers_id
JOIN manufacturers e ON o.manufacturer = e.manufacturers_id
JOIN manufacturers m ON o.manufacturer = m.manufacturers_id
JOIN rfq_order_status s ON o.status = s.id
LEFT JOIN shipping_address p ON o.rfq_id = p.rfq_id

当我尝试运行此查询时,它显示错误为“操作数应包含1列”。请帮助我。当我使用CASE WHEN o.ship_address = 0那么(a.entry_street_address)然后查询带给我街道地址,但我也希望国家在地址.Thanx提前

2 个答案:

答案 0 :(得分:0)

您的案例陈述是错误的。像这样使用它:

CASE WHEN cond THEN exp1 ELSE exp2 END

或者:

 CASE WHEN cond THEN exp1
     WHEN cond2 THEN exp2
     ELSE exp3 END

您也不能在其中放置多个列,它是一列。如果您确实需要更多列,则必须将它们连接起来,或复制case语句。

答案 1 :(得分:0)

concat两列,或使用2 CASE条。

SELECT  ...
       CASE
           WHEN o.ship_address = 0 THEN concat(a.entry_street_address,
                                         a.entry_state)
           WHEN o.ship_address = 1 THEN concat(p.street_address,
                                         p.state)
       END AS Address

或者

SELECT  ...
       CASE
           WHEN o.ship_address = 0 THEN a.entry_street_address
           WHEN o.ship_address = 1 THEN p.street_address
       END AS StreetAddress,
       CASE
           WHEN o.ship_address = 0 THEN a.entry_state
           WHEN o.ship_address = 1 THEN p.state
       END AS State,