Usuário com melhor resposta
Como faço esta query sem PIVOT

Pergunta
-
select
isnull(pedido_registro,'Total') as 'Data Pedido',sum
([1]) as 'Cartão de Crédito',sum([14]) as 'Doação' ,sum([1]+ [14]) as Totalfrom
(
select Convert(nvarchar (15),pedido_data,105)aspedido_registro
,p.pedido_id,pm.forma_pagamento_id from pedidos pinner
join pedidosmeios pm (nolock) on p.pedido_id = pm.pedido_idwhere
entidade_id = @ent_id and p.pedido_status_id = 44 and pedido_registrobetween
@data_inicial and @data_final) T PIVOT ( count(pedido_id)FOR forma_pagamento_idIN
([1], [14])) AS agroup
by pedido_registro with rollupTenho uma campo que armazena dois valores em alguns registros é o 14 e em outros é o 1, gostaria de criar uma coluna para o 14 e outra para o 1 somando quantas vezes o valor repete em função de um grupo como na query acima porém não posso usar o PIVOT pois estou usando uma Dataset tipado.
Respostas
-
Obrigado pessoal, consegui usando case.
Code SnippetSELECT convert(nvarchar (15),p.PEDIDO_REGISTRO,105) as Data_Pedido,
Cartao = count(CASE WHEN pm.forma_pagamento_id = 1 THEN p.PEDIDO_ID end),
Doacao = count(CASE WHEN pm.forma_pagamento_id = 14 THEN p.PEDIDO_ID end),
Total= (count(CASE WHEN pm.forma_pagamento_id = 1 THEN p.PEDIDO_ID end) + count(CASE WHEN pm.forma_pagamento_id = 14 THEN p.PEDIDO_ID end))
FROM
PEDIDOS p INNER JOIN PedidosMeios pm (nolock) ON p.PEDIDO_ID = pm.PEDIDO_ID
WHERE (p.ENTIDADE_ID = @ent_id) AND (p.PEDIDO_STATUS_ID = 44) AND (p.PEDIDO_REGISTRO BETWEEN @data_inicial AND @data_final)
GROUP BY convert(nvarchar (15),p.PEDIDO_REGISTRO,105) with rollup
Todas as Respostas
-
-
Olá Nelson,
Fiquei confuso com sua consulta e não sei bem como reescrevê-la (detalhar a necessidade às vezes é mais fácil de entender do que o código). De qualquer forma, se o PIVOT não o atende, experimente o uso de Subqueries (Derived Table). Ex:
Code SnippetSELECT
ID, Campo (SELECT SUM(Valor) FROM tb2 WHERE tb1.ID = tb2.ID AND Categoria = 14) AS Credito, (SELECT SUM(Valor) FROM tb2 WHERE tb1.ID = tb2.ID AND Categoria = 1) AS DoacaoFROM
tb1
[ ]s,
Gustavo
-
-
-
-
Oi Jr.
Não sei o porque DataSet tipados não podem utilizar esse tipo de SELECT. Como View também gravam dados em tabelas de metadados, imagino que o DataSet irá ler os tipos de dados retornados pela View e nesse caso essa limitação estará superada.
[ ]s,
Gustavo
-
Obrigado pessoal, consegui usando case.
Code SnippetSELECT convert(nvarchar (15),p.PEDIDO_REGISTRO,105) as Data_Pedido,
Cartao = count(CASE WHEN pm.forma_pagamento_id = 1 THEN p.PEDIDO_ID end),
Doacao = count(CASE WHEN pm.forma_pagamento_id = 14 THEN p.PEDIDO_ID end),
Total= (count(CASE WHEN pm.forma_pagamento_id = 1 THEN p.PEDIDO_ID end) + count(CASE WHEN pm.forma_pagamento_id = 14 THEN p.PEDIDO_ID end))
FROM
PEDIDOS p INNER JOIN PedidosMeios pm (nolock) ON p.PEDIDO_ID = pm.PEDIDO_ID
WHERE (p.ENTIDADE_ID = @ent_id) AND (p.PEDIDO_STATUS_ID = 44) AND (p.PEDIDO_REGISTRO BETWEEN @data_inicial AND @data_final)
GROUP BY convert(nvarchar (15),p.PEDIDO_REGISTRO,105) with rollup