【问题标题】:Cannot figure out the issue with this SQL CASE无法弄清楚这个 SQL CASE 的问题
【发布时间】:2020-01-13 09:28:49
【问题描述】:
CASE
WHEN CAST(a.category AS VARCHAR) like '%jumpsuits%'   THEN CAST(a.google_product_category AS VARCHAR) = 'Apparel & Accessories > Clothing > One-Pieces > Jumpsuits & Rompers'
WHEN CAST(a.category AS VARCHAR) like '%knitwear%'    THEN CAST(a.google_product_category AS VARCHAR) = 'Apparel & Accessories > Clothing > Dresses'
WHEN CAST(a.category AS VARCHAR) like '%lounge wear%' THEN CAST(a.google_product_category AS VARCHAR) = 'Apparel & Accessories > Clothing > Shirts & Tops'
ELSE CAST(a.google_product_category AS VARCHAR) END as google_product_category

我面临的问题是:“SYNTAX_ERROR: line 7:6: All CASE results must be the same type: boolean”

我还在之前的子查询中加入了该表,将其转换为 varchar,因此应该没有任何问题。

有人有什么想法吗?

对于上下文,我正在尝试填充一个字段,该字段将返回一个空白,该类别就像我的“喜欢”其他任何我希望它保持原样的东西。

非常感谢

【问题讨论】:

  • 在您的前三个分支中,您有一个 = 操作,它产生一个布尔值。但最后一个是字符串。那不匹配。要获得更多帮助,您应该edit 问题并发布minimal reproducible example,即CREATE TABLE 语句,INSERT INTO 语句用于一些示例数据以及将该示例数据作为表格文本的所需结果。
  • category 是什么数据类型?转换为 varchar 似乎毫无用处。

标签: sql string postgresql casting case


【解决方案1】:

您的CASE 具有返回不同数据类型的表达式,这是不允许的。如果您只是尝试根据category 列更新google_product_category,请尝试以下操作:

数据样本

CREATE TEMPORARY TABLE t (category TEXT, google_product_category TEXT);
INSERT INTO t VALUES ('Jumpsuit'),('kniTweaR'),('lounge WEAR');

查询

SELECT category,
  CASE 
    WHEN category ILIKE '%jumpsuit%' 
      THEN 'Apparel & Accessories > Clothing > One-Pieces > Jumpsuits & Rompers'
    WHEN category ILIKE '%knitwear%' 
      THEN 'Apparel & Accessories > Clothing > Dresses'
    WHEN category ILIKE '%lounge wear%' 
      THEN 'Apparel & Accessories > Clothing > Shirts & Tops'
  END
FROM t;

  category   |                                case                                 
-------------+---------------------------------------------------------------------
 Jumpsuit    | Apparel & Accessories > Clothing > One-Pieces > Jumpsuits & Rompers
 kniTweaR    | Apparel & Accessories > Clothing > Dresses
 lounge WEAR | Apparel & Accessories > Clothing > Shirts & Tops
(3 Zeilen)

【讨论】:

  • @JK1993 很高兴它有帮助!如果您的列已经是文本,则无需转换它们,并考​​虑使用ILIKE 而不是LIKE,以防您不能 100% 确定拼写(LIKE 区分大小写)。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-24
  • 1970-01-01
  • 2023-02-11
  • 1970-01-01
相关资源
最近更新 更多