SQL Скрыть нули и объединить результаты с объединением

Как я могу «присоединиться» к результатам и избежать дубликатов? Как функция Distinct. Я использую Microsoft SQL Server Studio

введите описание изображения здесь

Запрос:

SELECT CLI.NUMERO as Contaa ,CLI.NOME as NOMEe ,COUNT(DISTINCT CA.Numero) as cartCriados ,NULL as TotQTD FROM Clientes as CLI LEFT JOIN Cartoes (nolock) as CA ON CA.Cliente=CLI.NUMERO LEFT JOIN VendasPOS_Cabecalhos (nolock) as VPC ON VPC.CLIENTE=CLI.NUMERO LEFT JOIN VendasPOS_Linhas (nolock) as VPL ON VPL.PRENUMERO=VPC.PRENUMERO WHERE CLI.NUMERO LIKE '2119%' GROUP BY CLI.NUMERO, CLI.NOME UNION ALL SELECT CLI.NUMERO as Contaa ,CLI.NOME as NOMEe ,NULL as cartCriados ,Sum(ln.qtd) as TotQTD from CB_VendasPOS (nolock) as VPCB right outer join VendasPOS_Linhas (nolock) as LN on (Ln.AutoReg=VPCB.AutoReg) join VendasPOS_Cabecalhos (nolock) as Cab ON (ln.prenumero=cab.prenumero) join Clientes (nolock) as Cli on Cli.numero=cab.cliente join VendasPOS_Turnos (nolock) as tu on (tu.codturnoauto=cab.codturnoauto) right outer join cartoes_mov (nolock) as cm on cm.prenumero=cab.prenumero where cab.data>='2015-01-01 00:00:00' and cab.data<='2015-01-30 00:00:00' and cm.tipocrt='D' group by CLI.NUMERO, cli.nome ORDER BY CLI.NUMERO 

Не изменяя свой запрос, вы можете группировать его по клавишам ( Contaa и NOMEe ) и принимать MAX() полей с NOMEe значением:

 SELECT Contaa, NOMEe, MAX(cartCriados), MAX(TotQTD) FROM (SELECT CLI.NUMERO as Contaa ,CLI.NOME as NOMEe ,COUNT(DISTINCT CA.Numero) as cartCriados ,NULL as TotQTD FROM Clientes as CLI LEFT JOIN Cartoes (nolock) as CA ON CA.Cliente=CLI.NUMERO LEFT JOIN VendasPOS_Cabecalhos (nolock) as VPC ON VPC.CLIENTE=CLI.NUMERO LEFT JOIN VendasPOS_Linhas (nolock) as VPL ON VPL.PRENUMERO=VPC.PRENUMERO WHERE CLI.NUMERO LIKE '2119%' GROUP BY CLI.NUMERO, CLI.NOME UNION ALL SELECT CLI.NUMERO as Contaa ,CLI.NOME as NOMEe ,NULL as cartCriados ,Sum(ln.qtd) as TotQTD from CB_VendasPOS (nolock) as VPCB right outer join VendasPOS_Linhas (nolock) as LN on (Ln.AutoReg=VPCB.AutoReg) join VendasPOS_Cabecalhos (nolock) as Cab ON (ln.prenumero=cab.prenumero) join Clientes (nolock) as Cli on Cli.numero=cab.cliente join VendasPOS_Turnos (nolock) as tu on (tu.codturnoauto=cab.codturnoauto) right outer join cartoes_mov (nolock) as cm on cm.prenumero=cab.prenumero where cab.data>='2015-01-01 00:00:00' and cab.data<='2015-01-30 00:00:00' and cm.tipocrt='D' group by CLI.NUMERO, cli.nome ORDER BY CLI.NUMERO) t GROUP BY t.Contaa, t.NOMEe 

Возможно, вам лучше отказаться от рефакторинга запроса, так что это всего лишь один SELECT хотя … Я принял удар, но трудно сказать, действительно ли это улучшит все, что будет стоить, особенно если не увидеть некоторые исходные данные для тестирования с помощью ,

Interesting Posts

Выберите из списка | Заказ не работает

Ошибка «вывести из последовательности» возвращающую таблицу из функции Oracle в C #, где функция использует dblink для SQL Server

Идентификатор SQL (1,1), начинающийся с 0

Два сервера, выполняющие один и тот же запрос, в одну общую базу данных c #

SQL Server получает конкатенированные диапазоны номеров (ISLANDS в последовательностях) из списка

SSRS: как показать весь месяц года как ось X графика

Есть ли способ перебрать переменную таблицы в TSQL без использования курсора?

Поворотная с неопределенным количеством различных значений

Логика SQL Try / Catch с вложенными транзакциями

Try-Catch в SQL Server?

Как получить последние версии модулей в моем левом внутреннем соединении?

Проверить один столбец для нескольких значений mysql

Пример примера SQL CASE

Как выбрать более одного уникального идентификатора?

Проверьте, не имеет ли значение столбца значение null в SQL Server

Давайте будем гением компьютера.