我有一个主表(MT),其中包含一个名为Wine_Variety的字段。这填充了类似于以下内容的数据......
CUSTOMER_NUMBER|WINE_VARIETY
1001|SHIRAZ
1002|CHARDONNAY,MERLOT
1003|MERLOT,CHARDONNAY,MALBEC
1004|MALBEC,RIESLING
我开发了一个子查询(SQ),它返回从交易表中提取的前五种销售葡萄酒的价值。这基本上产生一个类似于以下
的列表VARIETY|QUANTITY
SHIRAZ|10000
CABERNET SAUVIGNON|9500
CABERNET MALBEC|8000
CHARDONNAY|7000
CHAMPAGNE|6000
我想知道MT的哪些顾客购买了SQ中的葡萄酒。
查看上面的列表,我希望查询返回客户1001 - 1003,而不是客户1004,他们没有购买前五名的葡萄酒。
我认为以下会实现这一点,但它会出现0行
sel * from MT
where MT.Wine_Variety like any
(
sel search_string from
(
sel top 5 variety, '''%'||variety||'%''' as search_string ,sum(quantity) as total_bought
from some_transaction_table
where variety is not null and variety <> ''
group by 1,2
order by 3 desc
) a
);
然而,如果我尝试以下方法,它就有效......
sel * from MT where MT.Wine_Variety like any ('%SHIRAZ%','%CHARDONNAY%')
有什么想法吗?
答案 0 :(得分:0)
我认为in
更简单:
select mt.*
from MT
where MT.Wine_Variety in (select top 5 stt.variety
from some_transaction_table
where stt.variety is not null and stt.variety <> ''
group by stt.variety
order by sum(stt.quantity) desc
);