case 语句中的子查询不起作用雪花查询

问题描述 投票:0回答:1

我有一张如下表:

enter image description here

我想要如下:

enter image description here

我正在雪花中尝试这个。 我使用 case 语句并按 row_number 查询进行分区来获取最新的价格值。

但是我在雪花中遇到了错误

SQL 编译错误:无法评估不支持的子查询类型

我尝试使用 case sql 并使用 row_number 查询分区来获取最新的日期值。

还有其他方法可以在 SQL 中实现此目的吗?

我使用这个sql:

Select 
t1.S_ID,t1.BASE,t1.Price_Attribute,
case when (t1.BASE = 'SIM1')
     then (Select C1.Price_Value
     from (Select S_ID,BASE,Price_Attribute,Price_Value,LAST_MODIFIED_DATE,
     ROW_NUMBER() OVER (PARTITION BY S_ID ORDER BY (LAST_MODIFIED_DATE) DESC) AS RowNumber
     from Table2
     where BASE ='SIM1'
        and Price_Attribute ='REC_PRC')as C1
         where C1.RowNumber = 1 and C1.S_ID = t1.S_ID)
     end as Price_Value,
t1.LAST_MODIFIED_DATE
from Table1 t1
where t1.S_ID in ('S1','S2','S3')
sql subquery snowflake-cloud-data-platform case
1个回答
0
投票

Snowflake 不支持相关子查询,但如果子查询是标量,它就可以工作。 我可以看到你的 CASE 语句有一个相关的子查询。

试试这个代码:

SELECT 
  t1.S_ID,
  t1.BASE,
  t1.Price_Attribute,
  CASE 
    WHEN t1.BASE = 'SIM1' THEN 
      (SELECT MAX(C1.Price_Value)
       FROM Table2 AS C1
       WHERE C1.BASE = 'SIM1'
         AND C1.Price_Attribute = 'REC_PRC'
         AND C1.S_ID = t1.S_ID)
  END AS Price_Value,
  t1.LAST_MODIFIED_DATE
FROM 
  Table1 t1
WHERE 
  t1.S_ID IN ('S1', 'S2', 'S3');

这可能适合您的情况,因为 max 运算符将使子查询成为标量,并且当您将检索到的记录限制为一条时不会产生影响。

© www.soinside.com 2019 - 2024. All rights reserved.