Я использую Teradata 15.10.У меня есть таблица с двумя столбцами last_name и first_name.Для каждой строки мне нужно подсчитать, сколько других строк имеют одинаковые last_name и first_name, но с обратными значениями, и отобразить это количество (даже если оно равно 0).На данный момент я использую этот запрос:
SELECT LAST_NAME,
FIRST_NAME,
(SELECT Count(*)
FROM myTable AS T1
WHERE T1.FIRST_NAME = T2.LAST_NAME
AND T1.LAST_NAME = T2.FIRST_NAME) AS REVERSE_NAME_COUNT
FROM myTable AS T2
К сожалению, это не очень быстро, и у меня есть много других столбцов, где я делаю такой подсчет.Мне было интересно, есть ли способ перевести вышеупомянутый скалярный подзапрос в функцию OLAP, например:
SUM(CASE WHEN T1.FIRST_NAME = T2.LAST_NAME AND T1.LAST_NAME = T2.FIRST_NAME THEN 1 ELSE 0 END) OVER(ROWS UNBOUNDED PRECEDING)
Но из того, что я понимаю, нет способа получить доступ к значениям, которые в настоящее время обрабатываются в разделе.Есть ли другой способ написать свой подзапрос?
Пример ввода:
FIRST_NAME LAST_NAME
----------------------------------
SYLVIE BOUVET
LUCIENNE BRUN
BOUVET SYLVIE
FRANCINE CARON
BRUN LUCIENNE
BRUN LUCIENNE
KEVIN MACHETEL
REMI MINVIELLE
QUENTIN THUILLIER
MINVIELLE REMI
Пример желаемого вывода:
FIRST_NAME LAST_NAME REVERSE_NAME_COUNT
------------------------------------------------------
SYLVIE BOUVET 1
LUCIENNE BRUN 2
BOUVET SYLVIE 1
FRANCINE CARON 0
BRUN LUCIENNE 1
BRUN LUCIENNE 1
KEVIN MACHETEL 0
REMI MINVIELLE 1
QUENTIN THUILLIER 0
MINVIELLE REMI 1