Usuário com melhor resposta
Juntar 3 queyes

Pergunta
-
Bom dia pessoal,
Estou com um problema aqui no trabalho.Preciso fazer uma query que englobe as vendas, as metas e o calendario 454 e me de os valores diarios, mensais e anuais, porem a query que realizei nao esta batendo os valores com a planinha do excel que ja existe. Separadamente elas rodam e chegam a resultado correto entao acredito que seja algo nos left join.Alguem poderia olha e ver se encontra algum probema?
Obrigada
select
si.store_id,
ca.year_454,
ca.day,
ca.day_454,
ca.week,
ca.week_454,
ca.month,
ca.month_454,
ca.year,it.category,
it.subcategory1,
sum(si.paid_price) venda,
sum(me.meta_valor_venda)/7 meta
from data_warehouse.dbo.calendar ca
left join data_warehouse.dbo.sales_item si
on left(ca.[date],11)= left(si.[date],11)
left join skina.dbo.GIV_META_AGRUPAMENTO me
on left(me.ano_semana_454,4)=ca.year_454 and RIGHT(me.ano_semana_454,2)= ca.week_454
and case when me.cod_canal_distribuicao = '000001' then 'ma'
when me.cod_canal_distribuicao ='000003' then 'gl'
when me.cod_canal_distribuicao ='000002' then 'ou'
when me.cod_canal_distribuicao='000005' then 'ba' end = si.store_id
left join skina.dbo.produtos_subgrupo ps
on substring(me.id_agrupamento,7,2)=ps.codigo_subgrupo
and substring (me.id_agrupamento,4,2)=left(ps.grupo_produto,2)
left join skina.dbo.produtos_linhas pl
on left(me.id_agrupamento,2)=pl.cod_linha
left join data_warehouse.dbo.item_info it
on it.sku_simple = si.sku_simple
and it.category = pl.linha
and it.subcategory1 = ps.GRUPO_PRODUTO
and it.subcategory2 = ps.SUBGRUPO_PRODUTO
where ca.year_454 = '2014'
and si.store_id = 'BA'
and me.COD_REVISAO = '5'
and ca.week_454 = '40'
and it.category = 'infantil'
and it.subcategory1 = '01-bebe'
group by
si.store_id,
ca.year,
ca.year_454,
it.category,
it.subcategory1,
me.ANO_SEMANA_454,
me.META_VALOR_VENDA
,me.ID_AGRUPAMENTO,
ca.day,
ca.week,
ca.month,
ca.day_454,
ca.week_454,
month_454,
me.COD_CANAL_DISTRIBUICAO
order by
ca.day_454 asc
Respostas
-
Julia,
Você poderia justamente dividir este trabalho em partes, na parte de cabeçalho do seu relatório você traz os dados que deseja apresentar.
Na parte do detalhe você poderia justamente listar estas metas que você deseja com base na data de pesquisa, e por fim na parte do rodapé do relatório apresentar os respectivos totais e demais cálculos.
Desta forma, você poderia ter querys específicas para cada estrutura do seu relatório e conforme o relatório vai sendo processado você vai passa a data de pesquisa como parâmetro de entrada de dados para demais querys ou subquerys.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
Todas as Respostas
-
Julia,
Vamos por partes:
1 - O que você já conseguiu fazer?
2 - Como esta definido o relacionamento entre estes dados?
3 - Estes valores devem ser apresentados em conjunto com outros dados ou seria uma espécie de sumário?
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Ja consegui juntar os dados da planinha de datas com as de vendas, que seriam a date_warehouse.dbo.calendar e a date_warehoouse.dbo.sales_item.Isso resulta nesta query
select
si.store_id,
case when len(ca.[day])=1 then '0'+ca.[day] else ca.[day] end dia,
case when len(ca.[week])=1 then '0'+ca.[week] else ca.week end semana,
case when len(ca.[month])=1 then '0'+ca.[month] else ca.[month] end mes,
case when len(ca.[day_454])=1 then '0'+ca.[day_454] else ca.[day_454]end day_454,
case when len(ca.[week_454])=1 then '0'+ca.[week_454] else ca.[week_454] end week_454,
case when len(ca.[month_454])=1 then '0'+ca.[month_454] else ca.[month_454] end month_454,
ca.year_454,
ca.year,
it.category,
it.subcategory1,
sum(si.paid_price) venda
from data_warehouse.dbo.calendar ca
left join data_warehouse.dbo.sales_item si
on left(ca.[date],11)= left(si.[date],11)
left join data_warehouse.dbo.item_info it
on it.sku_simple = si.sku_simple
where si.quantity > '0'
and ca.year = '2014'
and si.store_id = 'BA'
group by
si.store_id,
ca.day,
ca.day_454,
ca.week_454,
ca.month_454,
ca.month,
ca.week,
ca.year,
ca.year_454,
it.category,
it.subcategory1
order by
ca.year ascA minha dificuldade esta sendo colocar as metas, que ficas no Skina.dbo.GIV_meta_agrupamento, que seria essa query:
select
sum(me.meta_valor_venda)/7 meta_valor,
lower(dbo.trim(pl.linha)),
lower(dbo.trim(ps.grupo_produto)),
lower(dbo.trim(ps.subgrupo_produto)),
me.id_agrupamento,
me.ano_semana_454,
left(me.ano_semana_454,4) ano,
right(me.ano_semana_454,2) semana,
cal.month_454,
case when me.cod_canal_distribuicao = '000001' then 'ma'
when me.cod_canal_distribuicao ='000003' then 'gl'
when me.cod_canal_distribuicao ='000002' then 'ou'
when me.cod_canal_distribuicao='000005' then 'ba'
when me.cod_canal_distribuicao='000006' then 'cd'
else 'ops' end store
from skina.dbo.giv_meta_agrupamento me
left join skina.dbo.produtos_subgrupo ps
on substring(me.id_agrupamento,7,2)=ps.codigo_subgrupo
and substring (me.id_agrupamento,4,2)=left(ps.grupo_produto,2)
left join skina.dbo.produtos_linhas pl
on left(me.id_agrupamento,2)=pl.cod_linha
left join data_warehouse.dbo.calendar cal
on left(me.ano_semana_454,4)=cal.year_454 and right(me.ano_semana_454,2)=
case when len(cal.week_454)=1 then '0'+cal.week_454
else cal.week_454 end
where me.cod_revisao='5'
group by
pl.linha,
ps.grupo_produto,
ps.subgrupo_produto,
me.id_agrupamento,
me.ano_semana_454,
left(me.ano_semana_454,4),
right(me.ano_semana_454,2),
cal.month_454,
case when me.cod_canal_distribuicao = '000001' then 'ma'
when me.cod_canal_distribuicao ='000003' then 'gl'
when me.cod_canal_distribuicao ='000002' then 'ou'
when me.cod_canal_distribuicao='000005' then 'ba'
when me.cod_canal_distribuicao='000006' then 'cd'
else 'ops' endpreciso de um relatorio onde posso pesquisar por exemplo, a meta para o dia 01/12/2015 e o quanto foi a venda real e tambem a soma da meta da semana 40 versus a venda dessa mesmo semana.
-
Julia,
Você poderia justamente dividir este trabalho em partes, na parte de cabeçalho do seu relatório você traz os dados que deseja apresentar.
Na parte do detalhe você poderia justamente listar estas metas que você deseja com base na data de pesquisa, e por fim na parte do rodapé do relatório apresentar os respectivos totais e demais cálculos.
Desta forma, você poderia ter querys específicas para cada estrutura do seu relatório e conforme o relatório vai sendo processado você vai passa a data de pesquisa como parâmetro de entrada de dados para demais querys ou subquerys.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]