将变量添加到 CASE 语句中然后输出

adding a variable into a CASE statement THEN output

如果我在Impala中有如下代码:

(CASE 
  WHEN a3.shipped_qty1 > a4.shipped_qty2 AND a1.min1 < a2.min2 THEN "KEEP"
  WHEN a3.shipped_qty1 < a4.shipped_qty2 AND a1.min1 < a2.min2 THEN "MOVE"
  WHEN a3.shipped_qty1 > a4.shipped_qty2 AND a1.min1 > a2.min2 THEN "MOVE"
  WHEN a3.shipped_qty1 < a4.shipped_qty2 AND a1.min1 > a2.min2 THEN "KEEP"
  ELSE "NOT SHIPPING"
END) AS move

我希望文本输出如下内容:

(CASE 
  WHEN a3.shipped_qty1 > a4.shipped_qty2 AND a1.min1 < a2.min2 THEN "KEEP"
  WHEN a3.shipped_qty1 < a4.shipped_qty2 AND a1.min1 < a2.min2 THEN "MOVE TO **a3.supplier**"
  WHEN a3.shipped_qty1 > a4.shipped_qty2 AND a1.min1 > a2.min2 THEN "MOVE TO **a4.supplier**"
  WHEN a3.shipped_qty1 < a4.shipped_qty2 AND a1.min1 > a2.min2 THEN "KEEP"
  ELSE "NOT SHIPPING"
END) AS move

我该如何编码?

您可以使用 CONCAT() 构建输出字符串:

(CASE 
  WHEN a3.shipped_qty1 > a4.shipped_qty2 AND a1.min1 < a2.min2 THEN "KEEP"
  WHEN a3.shipped_qty1 < a4.shipped_qty2 AND a1.min1 < a2.min2 THEN concat("MOVE TO **",coalesce(a3.supplier,''),"**")
  WHEN a3.shipped_qty1 > a4.shipped_qty2 AND a1.min1 > a2.min2 THEN concat("MOVE TO **",coalesce(a4.supplier,''),"**")
  WHEN a3.shipped_qty1 < a4.shipped_qty2 AND a1.min1 > a2.min2 THEN "KEEP"
  ELSE "NOT SHIPPING"
END) AS move

P.S。我还将供应商值包装在 COALESCE() 中,因为我不知道这些列是否可以为空,否则如果这些值为空,查询将失败。