【问题标题】:Use new column created from CASE使用从 CASE 创建的新列
【发布时间】:2021-06-27 20:56:38
【问题描述】:

这是我拥有的一段 SQL:

  select 
  ,V_QUOTE_CASE_OPP_FROM2020.SR_NUM
  ,V_SF_OPPORTUNITY_ITEMS.PROD_FAMILY
  ,case 
                     when PROD_FAMILY like '%Tax%' then 'Tax'
                     when PROD_FAMILY like '%Practice Manager%' then 'Practice Manager'
                     when PROD_FAMILY like '%Compliance%' then 'Compliance'
                     else PROD_FAMILY end as PRODUCT_FAMILY
  ,CONCAT(V_QUOTE_CASE_OPP_FROM2020.SR_NUM, PRODUCT_FAMILY) as 'RN_PRODFAM'

  FROM [COMMOPSDB].[dbo].[V_QUOTE_CASE_OPP_FROM2020]

  LEFT JOIN [COMMOPSDB].[dbo].[V_SF_OPPORTUNITY_ITEMS]

(这是一个精简版)。

我遇到的问题是 CONCAT 不工作 - 当我运行它时它显示“无效的列名 'Product Family'”。

我尝试将 PRODUCT_FAMILY 替换为 V_SF_OPPORTUNITY_ITEMS.PRODUCT_FAMILY,结果相同。

请问我做错了什么?

谢谢!

【问题讨论】:

  • edit 为您正在使用的特定 DBMS 添加标签,因为它们之间的功能和语法各不相同。它可以避免浪费您的时间和试图回答您的问题的用户的时间,结果却被告知它在您使用的 DBMS 中不起作用。
  • 公平通话 - 对不起!
  • 但是您还没有edit您的帖子添加该标签。请现在就这样做。

标签: sql concatenation case


【解决方案1】:

您不能在同一语句中引用仅在 select 语句中创建的新列。最简单的解决方案是使用 CTE 即。

with temp as (  select 
  ,V_QUOTE_CASE_OPP_FROM2020.SR_NUM
  ,V_SF_OPPORTUNITY_ITEMS.PROD_FAMILY
  ,case 
     when PROD_FAMILY like '%Tax%' then 'Tax'
     when PROD_FAMILY like '%Practice Manager%' then 'Practice Manager'
     when PROD_FAMILY like '%Compliance%' then 'Compliance'
     else PROD_FAMILY end as PRODUCT_FAMILY
    )
Select [can now reference temp.PROD_FAMILY]

【讨论】:

    猜你喜欢
    • 2021-11-29
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2020-08-27
    • 1970-01-01
    相关资源
    最近更新 更多