2014-10-14 2 views
1

Скажем, у меня есть следующий столбец в таблице Teradata:Teradata - частота слова в колонке

Red ball 
Purple ball 
Orange ball 

Я хочу, чтобы мой выход будет

Word Count 
Red  1 
Ball 3 
Purple 1 
Orange 1 

Спасибо.

+0

Какой ваш релиз TD? – dnoeth

+0

SQL Assistant Version 14.10.0.05 – kittymad

+0

Это клиентская версия, что возвращается 'select * from dbc.dbcinfoV; *? – dnoeth

ответ

4

В TD14 есть STRTOK_SPLIT_TO_TABLE функция:

SELECT token, COUNT(*) 
FROM TABLE (STRTOK_SPLIT_TO_TABLE(1 -- this is just a dummy, usually the PK column when you need to join 
           ,table.stringcolumn 
           ,' ') -- simply add other separating characters 
    RETURNS (outkey INTEGER, 
       tokennum INTEGER, 
       token VARCHAR(100) CHARACTER SET UNICODE 
      ) 
      ) AS d 
GROUP BY 1 
+0

спасибо. – kittymad

0

Измените таблицу с этим

name |name2 
_______________ 
red | ball 
purple | ball 
orange | ball 
_______________ 

И затем выполнить следующий запрос:

select name, count(name)as name1_count from table_test 
group by name 
union all 
select name2,count(name2)as name2_count from table_test 
group by name2; 
+0

К сожалению нет, это единственная колонка, о которой я говорю, и столбец может содержать до 10-15 слов. – kittymad

1

Вот как я бы обрабатывать что-то вроде этого:

WITH RECURSIVE CTE (POS, NEW_STRING, REAL_STRING) AS 
(
SELECT 
0, CAST('' AS VARCHAR(100)),TRIM(word) 
FROM wordcount 
UNION ALL 
SELECT 
CASE WHEN POSITION(' ' IN REAL_STRING) > 0 
THEN POSITION(' ' IN REAL_STRING) 
ELSE CHARACTER_LENGTH(REAL_STRING) 
END DPOS, 
TRIM(BOTH ' ' FROM SUBSTR(REAL_STRING, 0, DPOS+1)), 
TRIM(SUBSTR(REAL_STRING, DPOS+1)) 
FROM CTE 
WHERE DPOS > 0 
) 

SELECT TRIM(NEW_STRING) as word, 
count (*) 
FROM CTE 
group by word 
WHERE pos > 0; 

который будет возвращать:

word Count(*) 
    orange 1 
    purple 1 
    red 1 
    ball 3 

Может быть более простой способ с регулярным выражением в 14, но я еще не испортил его.

EDIT: Удалены некоторые ненужные столбцы из запроса.

+0

Я как-то получаю другой ответ, когда я делаю такой подсчет: Выберите сумму (если цвет как «% фиолетовый%», а затем еще 1 конец) из wordcount Не на этой таблице примеров, а на всей моей таблице. Любая идея почему? – kittymad

+0

Никакой подсказки, если честно. Попробуйте ответить dnoeth над моей. Это, безусловно, намного чище. – Andrew

+0

Они оба дают мне тот же результат. Я принял ответ dnoeth, потому что он действительно опрятный. Большое спасибо, очень ценю вашу помощь. – kittymad

Смежные вопросы