我在这里很新,并尝试过有关SQL的Stackoverflow帖子的各种提示,但还没有能够解决这个问题。 我有一个表是加入表的结果,看起来像这样
表A
cust_id prod_type
001 A
001 A
002 A
002 B
003 A
003 C
我需要应用逻辑:如果每个cust_id至少有一个值,其中prod_type是B或C,则返回相应的prod_type值。如果对于每个cust_id,prod_type的所有值都是A,则返回A.
我想要的最终输出是
表B
cust_id prod_type
001 A
002 B
003 C
我尝试过使用
SELECT
A.cust_id
,CASE WHEN prod_type in ('B', 'C') THEN prod_type OVER (PARTITION BY A.cust_id)
ELSE 'A' OVER (PARTITION BY A.cust_id) END AS product
FROM ([Joined Tables]) AS A
似乎teradata不允许在案例陈述中使用over(子句):期望' END' prod_type和OVER关键字之间的关键字。
答案 0 :(得分:3)
您希望每位客户只返回一行,且匹配度最高product_type
?
如果有其他列:
SELECT
A.cust_id
,prod_type
,...
FROM ([Joined Tables]) AS A
QUALIFY
ROW_NUMBER()
OVER (PARTITION BY CUST_ID
ORDER BY CASE WHEN prod_type in ('B', 'C') -- best match first
THEN 1
ELSE 2
END,
prod_type) = 1
否则@Frisbee的MAX
会起作用,但我认为A / B / C不是您的实际产品名称:
SELECT
A.cust_id
,COALESCE(MAX(CASE WHEN prod_type in ('B', 'C') THEN prod_type END)
,MAX(CASE WHEN prod_type not in ('B', 'C') THEN prod_type END))
FROM ([Joined Tables]) AS A
GROUP BY just_id