2014-10-21 2 views
1

В сущности У меня есть одна таблица с двумя столбцамиПодсчет из 2 столбцов в сервере SQL

One Two  
----------- 
A  B 
B  C  
C  D 

и я хочу, чтобы подсчитать количество А-ых через D.

Результирующая

Letter Count 
--------------- 
    A  1 
    B  2 
    C  2 
    D  1 

Мой код сейчас

Select one, count("") from table 
group by one 
union  
Select two, count("*") from table 
group by two 

Сейчас я получаю

Letter Count 
--------------- 
    A  1 
    B  1 
    B  1 
    C  1 
    C  1 
    D  1 

Как исправить это?

ответ

3

Попробуйте

SELECT Count(a), 
     a 
FROM (SELECT cola a 
     FROM table 
     UNION ALL 
     SELECT colb a 
     FROM table) c 
GROUP BY a 
+0

СПАСИБО ЭТО РАБОТАЛ !!!! – polka

+2

Не знаете, почему кто-то проголосовал бы за это, так как это правильное решение. – jpw

+0

@Pradeeep вы можете использовать UNION вместо UNION ALL Bcoz UNION намного эффективнее, чем UNION ALL. –

1

нет оснований группы дважды.

select letter, count(*) as total_cnt 
from 
(
Select one as letter from table 
union all 
Select two as letter from table 
) 
group by letter; 
+0

СПАСИБО ЭТО РАБОТАЕТ !!!! – polka

+2

@bropedope На самом деле это неверно, поскольку 'union'woutout'all'eliminates duplicates. – jpw

+0

@jpw Никогда не знал этого! – user3616725

1
select letter, sum(total) from 
(
Select one as letter, count(1) as total from tablename 
group by one 
union all 
Select two as letter, count(1) as total from tablename 
group by two) as t1 
group by t1.letter 
order by t1.letter asc 
0

Вы можете сделать это

SELECT LETTER, count(*) AS _count FROM ( SELECT One AS Letter FROM Test UNION ALL SELECT Two AS Letter FROM Test ) T1 GROUP BY LETTER

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