2016-09-19 2 views
0

Мне нужна помощь в этой проблеме.Я хочу сгруппировать и удалить значения из запроса с объединением

Select 
    pnf_notas_processadas.pnf_notas_dest_cnpj_cpf, 
    Count(Distinct pnf_notas_processadas.pnf_notas_nnf) As destinadas, 
    Sum(0) As emitidas 
From 
    pnf_notas_processadas 
Group By 
    pnf_notas_processadas.pnf_notas_dest_cnpj_cpf 
Having 
    pnf_notas_processadas.pnf_notas_dest_cnpj_cpf In ('03846642000102', 
    '03846642000285', '03846642000447', '03846642000528') 
Union 
Select 
    pnf_notas_processadas.pnf_notas_emit_cnpj_cpf, 
    Sum(0) As destinadas, 
    Count(Distinct pnf_notas_processadas.pnf_notas_nnf) 
From 
    pnf_notas_processadas 
Group By 
    pnf_notas_processadas.pnf_notas_emit_cnpj_cpf 
Having 
    pnf_notas_processadas.pnf_notas_emit_cnpj_cpf In ('03846642000102', 
    '03846642000285', '03846642000447', '03846642000528') 

результат:

enter image description here

Мои ожидания для запроса

enter image description here

ответ

0

Один метод должен сделать агрегацию в одном шаге. Однако вам нужно как-то объединиться по двум полям.

Вот этот метод. По сути, строки «в два раза», а затем агрегация вытаскивает правильные значения:

select (case when which = 1 then np.pnf_notas_dest_cnpj_cpf else pnf_notas_emit_cnpj_cpf end) as cnpj_cpf, 
     count(distinct case when which = 1 then np.pnf_notas_nnf end) as destinadas, 
     count(distinct case when which = 2 then np.pnf_notas_nnf end) as emitidas 
from pnf_notas_processadas np cross join 
    (values (1), (2)) as v(which) 
where np.pnf_notas_dest_cnpj_cpf In ('03846642000102', '03846642000285', '03846642000447', '03846642000528') 
Group By cnpj_cpf; 
+0

извините, я не знал –

0

Я настроил запрос

select (case when which = 1 then pnf_notas_processadas.pnf_notas_dest_cnpj_cpf else pnf_notas_processadas.pnf_notas_emit_cnpj_cpf end) as cnpj_cpf, 
     count(distinct case when which = 1 then pnf_notas_processadas.pnf_notas_nnf end) as destinadas, 
     count(distinct case when which = 2 then pnf_notas_processadas.pnf_notas_nnf end) as emitidas 
from pnf_notas_processadas cross join 
(values (1), (2)) as v(wich) 
where pnf_notas_processadas.pnf_notas_dest_cnpj_cpf In ('03846642000102', '03846642000285', '03846642000447', '03846642000528') 
Group By cnpj_cpf; 

но вернулся эту ошибку

выберите предложение ПЕРЕСТАЕТ ДЕЙСТВОВАТЬ неожиданный элемент " 2 "в строке 5, позиция 16

+0

Пожалуйста, не добавляйте дополнительную информацию в качестве ответа. [Изменить] (http://stackoverflow.com/posts/39580428/edit) вместо этого –