Как искать экземпляры строки подзапроса в строковом поле главной таблицы - teradata? - PullRequest
0 голосов
/ 10 июня 2018

У меня есть главная таблица (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

Я хочу выяснить, какие клиенты в МТ купили вина, которые появляются в 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%')

Есть мысли?

1 Ответ

0 голосов
/ 10 июня 2018

Я думаю 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
                         );
...