Dúvida CASE WHEN
Bom dia,
Preciso criar uma nova coluna com Case When do resultado de outra coluna CAse When, porém não estou conseguindo, estou começando a trabalhar com montagens de SQL server e não tenho muito conhecimento.
O resultado que preciso é deste Case:
case when round(sum(dsi.quantidade_total_atendida)/264,0) = 0 then round(i.media_venda_mes/22,0)
when round(i.media_venda_mes/22,0) = 0 then round(sum(dsi.quantidade_total_atendida)/264,0)
else round(sum(dsi.quantidade_total_atendida)/264,0)
end MÉDIA_UND_DIA
Preciso criar uma nova coluna com Case When do resultado de outra coluna CAse When, porém não estou conseguindo, estou começando a trabalhar com montagens de SQL server e não tenho muito conhecimento.
O resultado que preciso é deste Case:
case when round(sum(dsi.quantidade_total_atendida)/264,0) = 0 then round(i.media_venda_mes/22,0)
when round(i.media_venda_mes/22,0) = 0 then round(sum(dsi.quantidade_total_atendida)/264,0)
else round(sum(dsi.quantidade_total_atendida)/264,0)
end MÉDIA_UND_DIA
Anderson Pereira
Curtidas 0
Melhor post
Emerson Nascimento
26/01/2021
dependendo da complexidade da instrução:
select [listadecampos,] case when tab.MÉDIA_UND_DIA condicao then end from ( select [lista de campos,] case when round(sum(dsi.quantidade_total_atendida)/264,0) = 0 then round(i.media_venda_mes/22,0) when round(i.media_venda_mes/22,0) = 0 then round(sum(dsi.quantidade_total_atendida)/264,0) else round(sum(dsi.quantidade_total_atendida)/264,0) end MÉDIA_UND_DIA from [] ) tab
GOSTEI 1
Mais Respostas
Anderson Pereira
26/01/2021
Obrigado, mas não consegui aplicar.
Abaixo o SQL completo como ele é no momento e funciona, só me falta esta última coluna que estou tentadno colocar diretamente nele, sem a necessidade de aplicar uma fórmula depois:
SELECT distinct
TO_CHAR(SUBSTR(i.CANAL,1,3)) ESTAÇÃO,
i.CANAL ENDEREÇO,
'' KNAPP,
i.CODIGO_DO_ITEM CÓDIGO,
i.DESCRICAO_DO_ITEM DESCRIÇÃO,
i.CODIGO_DA_SITUACAO_DO_ITEM SIT_ITEM,
CASE WHEN TO_CHAR(SUBSTR(i.TIPO_DO_ITEM,1,1)) = 1 THEN 'MEDICAMENTO'
ELSE 'PERFUMARIA'
END TIPO_ITEM,
i.QTD_PEDIDO_PENDENTE QNT_PEND,
PE.QUANTIDADE_ARMAZENADA ESTOQUE,
PE.QUANTIDADE_RESERVADA RESERVA,
i.CUSTO_MEDIO CUSTO_MÉDIO,
i.QUANTIDADE_NA_EMBALAGEM_PADRAO PADRÃO_COMPRAS,
CDI.QTDE_UNIDADES_EMBALAGEM_PADRAO PADRÃO_EMB,
round(COUNT(DSI.NUMERO_DOCUMENTO_SEPARADOR)/264,0) MÉDIA_ACESSOS,
case when round(sum(dsi.quantidade_total_atendida)/264,0) = 0 then round(i.media_venda_mes/22,0)
when round(i.media_venda_mes/22,0) = 0 then round(sum(dsi.quantidade_total_atendida)/264,0)
else round(sum(dsi.quantidade_total_atendida)/264,0)
end MÉDIA_UND_DIA
FROM PROCPR.ITENS_PARA_REDE_DE_MICROS i,
POSICOES_DE_ESTOQUE pe,
REC_ITENS_CDS CDI,
documentos_separadores ds,
documentos_separ_item dsi
WHERE (i.CODIGO_DA_FILIAL=1021)
AND PE.CODIGO_DA_ENTIDADE_COMERCIAL = I.CODIGO_DA_FILIAL
AND CDI.CODIGO_DA_FILIAL = PE.CODIGO_DA_ENTIDADE_COMERCIAL
AND DS.CODIGO_DA_ENT_COMERCIAL_MADI = I.CODIGO_DA_FILIAL
AND DSI.CODIGO_DA_FILIAL = DS.CODIGO_DA_ENT_COMERCIAL_MADI
AND DS.NUMERO_DOCUMENTO_SEPARADOR = DSI.NUMERO_DOCUMENTO_SEPARADOR
AND DSI.CODIGO_DO_ITEM = I.CODIGO_DO_ITEM
AND CDI.CODIGO_DO_ITEM = PE.CODIGO_DO_ITEM
AND PE.CODIGO_DO_ITEM = I.CODIGO_DO_ITEM
AND PE.CODIGO_DO_TIPO_DE_ESTOQUE = 1
AND DS.TIPO_DO_DOCUMENTO_SEPARADOR IN ('A','P','M')
AND DS.DIA_DE_DISTRIBUICAO_MADI >= trunc(sysdate-365)
AND (i.DATA_GERACAO>=trunc(sysdate-1))
AND I.CANAL NOT IN 'NULL'
AND i.estacao in ('ALI','PSI','M13','GLD','GLP','CNT','M12','M08','PTP','FR1','GVL','P2P','KMP','KM2')
GROUP BY
TO_CHAR(SUBSTR(i.CANAL,1,3)),
i.CANAL,
i.CODIGO_DO_ITEM,
i.DESCRICAO_DO_ITEM,
i.CODIGO_DA_SITUACAO_DO_ITEM,
CASE WHEN TO_CHAR(SUBSTR(i.TIPO_DO_ITEM,1,1)) = 1 THEN 'MEDICAMENTO'
ELSE 'PERFUMARIA'
END,
i.QTD_PEDIDO_PENDENTE,
PE.QUANTIDADE_ARMAZENADA,
PE.QUANTIDADE_RESERVADA,
i.CUSTO_MEDIO,
i.QUANTIDADE_NA_EMBALAGEM_PADRAO,
CDI.QTDE_UNIDADES_EMBALAGEM_PADRAO,
(i.media_venda_mes/22,0)
Abaixo o SQL completo como ele é no momento e funciona, só me falta esta última coluna que estou tentadno colocar diretamente nele, sem a necessidade de aplicar uma fórmula depois:
SELECT distinct
TO_CHAR(SUBSTR(i.CANAL,1,3)) ESTAÇÃO,
i.CANAL ENDEREÇO,
'' KNAPP,
i.CODIGO_DO_ITEM CÓDIGO,
i.DESCRICAO_DO_ITEM DESCRIÇÃO,
i.CODIGO_DA_SITUACAO_DO_ITEM SIT_ITEM,
CASE WHEN TO_CHAR(SUBSTR(i.TIPO_DO_ITEM,1,1)) = 1 THEN 'MEDICAMENTO'
ELSE 'PERFUMARIA'
END TIPO_ITEM,
i.QTD_PEDIDO_PENDENTE QNT_PEND,
PE.QUANTIDADE_ARMAZENADA ESTOQUE,
PE.QUANTIDADE_RESERVADA RESERVA,
i.CUSTO_MEDIO CUSTO_MÉDIO,
i.QUANTIDADE_NA_EMBALAGEM_PADRAO PADRÃO_COMPRAS,
CDI.QTDE_UNIDADES_EMBALAGEM_PADRAO PADRÃO_EMB,
round(COUNT(DSI.NUMERO_DOCUMENTO_SEPARADOR)/264,0) MÉDIA_ACESSOS,
case when round(sum(dsi.quantidade_total_atendida)/264,0) = 0 then round(i.media_venda_mes/22,0)
when round(i.media_venda_mes/22,0) = 0 then round(sum(dsi.quantidade_total_atendida)/264,0)
else round(sum(dsi.quantidade_total_atendida)/264,0)
end MÉDIA_UND_DIA
FROM PROCPR.ITENS_PARA_REDE_DE_MICROS i,
POSICOES_DE_ESTOQUE pe,
REC_ITENS_CDS CDI,
documentos_separadores ds,
documentos_separ_item dsi
WHERE (i.CODIGO_DA_FILIAL=1021)
AND PE.CODIGO_DA_ENTIDADE_COMERCIAL = I.CODIGO_DA_FILIAL
AND CDI.CODIGO_DA_FILIAL = PE.CODIGO_DA_ENTIDADE_COMERCIAL
AND DS.CODIGO_DA_ENT_COMERCIAL_MADI = I.CODIGO_DA_FILIAL
AND DSI.CODIGO_DA_FILIAL = DS.CODIGO_DA_ENT_COMERCIAL_MADI
AND DS.NUMERO_DOCUMENTO_SEPARADOR = DSI.NUMERO_DOCUMENTO_SEPARADOR
AND DSI.CODIGO_DO_ITEM = I.CODIGO_DO_ITEM
AND CDI.CODIGO_DO_ITEM = PE.CODIGO_DO_ITEM
AND PE.CODIGO_DO_ITEM = I.CODIGO_DO_ITEM
AND PE.CODIGO_DO_TIPO_DE_ESTOQUE = 1
AND DS.TIPO_DO_DOCUMENTO_SEPARADOR IN ('A','P','M')
AND DS.DIA_DE_DISTRIBUICAO_MADI >= trunc(sysdate-365)
AND (i.DATA_GERACAO>=trunc(sysdate-1))
AND I.CANAL NOT IN 'NULL'
AND i.estacao in ('ALI','PSI','M13','GLD','GLP','CNT','M12','M08','PTP','FR1','GVL','P2P','KMP','KM2')
GROUP BY
TO_CHAR(SUBSTR(i.CANAL,1,3)),
i.CANAL,
i.CODIGO_DO_ITEM,
i.DESCRICAO_DO_ITEM,
i.CODIGO_DA_SITUACAO_DO_ITEM,
CASE WHEN TO_CHAR(SUBSTR(i.TIPO_DO_ITEM,1,1)) = 1 THEN 'MEDICAMENTO'
ELSE 'PERFUMARIA'
END,
i.QTD_PEDIDO_PENDENTE,
PE.QUANTIDADE_ARMAZENADA,
PE.QUANTIDADE_RESERVADA,
i.CUSTO_MEDIO,
i.QUANTIDADE_NA_EMBALAGEM_PADRAO,
CDI.QTDE_UNIDADES_EMBALAGEM_PADRAO,
(i.media_venda_mes/22,0)
GOSTEI 0
Emerson Nascimento
26/01/2021
como você está usando GROUP BY, a cláusula DISTINCT é desnecessária.
tratando do problema exposto:
tratando do problema exposto:
SELECT *, case when MÉDIA_UND_DIA = x then 'blablabla' else 'blebleble' end TEXTO_MÉDIA_UND_DIA FROM ( SELECT TO_CHAR(SUBSTR(i.CANAL,1,3)) ESTAÇÃO, i.CANAL ENDEREÇO, '' KNAPP, i.CODIGO_DO_ITEM CÓDIGO, i.DESCRICAO_DO_ITEM DESCRIÇÃO, i.CODIGO_DA_SITUACAO_DO_ITEM SIT_ITEM, CASE WHEN TO_CHAR(SUBSTR(i.TIPO_DO_ITEM,1,1)) = 1 THEN 'MEDICAMENTO' ELSE 'PERFUMARIA' END TIPO_ITEM, i.QTD_PEDIDO_PENDENTE QNT_PEND, PE.QUANTIDADE_ARMAZENADA ESTOQUE, PE.QUANTIDADE_RESERVADA RESERVA, i.CUSTO_MEDIO CUSTO_MÉDIO, i.QUANTIDADE_NA_EMBALAGEM_PADRAO PADRÃO_COMPRAS, CDI.QTDE_UNIDADES_EMBALAGEM_PADRAO PADRÃO_EMB, round(COUNT(DSI.NUMERO_DOCUMENTO_SEPARADOR)/264,0) MÉDIA_ACESSOS, case when round(sum(dsi.quantidade_total_atendida)/264,0) = 0 then round(i.media_venda_mes/22,0) when round(i.media_venda_mes/22,0) = 0 then round(sum(dsi.quantidade_total_atendida)/264,0) else round(sum(dsi.quantidade_total_atendida)/264,0) end MÉDIA_UND_DIA FROM PROCPR.ITENS_PARA_REDE_DE_MICROS i, POSICOES_DE_ESTOQUE pe, REC_ITENS_CDS CDI, documentos_separadores ds, documentos_separ_item dsi WHERE (i.CODIGO_DA_FILIAL=1021) AND PE.CODIGO_DA_ENTIDADE_COMERCIAL = I.CODIGO_DA_FILIAL AND CDI.CODIGO_DA_FILIAL = PE.CODIGO_DA_ENTIDADE_COMERCIAL AND DS.CODIGO_DA_ENT_COMERCIAL_MADI = I.CODIGO_DA_FILIAL AND DSI.CODIGO_DA_FILIAL = DS.CODIGO_DA_ENT_COMERCIAL_MADI AND DS.NUMERO_DOCUMENTO_SEPARADOR = DSI.NUMERO_DOCUMENTO_SEPARADOR AND DSI.CODIGO_DO_ITEM = I.CODIGO_DO_ITEM AND CDI.CODIGO_DO_ITEM = PE.CODIGO_DO_ITEM AND PE.CODIGO_DO_ITEM = I.CODIGO_DO_ITEM AND PE.CODIGO_DO_TIPO_DE_ESTOQUE = 1 AND DS.TIPO_DO_DOCUMENTO_SEPARADOR IN ('A','P','M') AND DS.DIA_DE_DISTRIBUICAO_MADI >= trunc(sysdate-365) AND (i.DATA_GERACAO>=trunc(sysdate-1)) AND I.CANAL NOT IN 'NULL' AND i.estacao in ('ALI','PSI','M13','GLD','GLP','CNT','M12','M08','PTP','FR1','GVL','P2P','KMP','KM2') GROUP BY TO_CHAR(SUBSTR(i.CANAL,1,3)), i.CANAL, i.CODIGO_DO_ITEM, i.DESCRICAO_DO_ITEM, i.CODIGO_DA_SITUACAO_DO_ITEM, CASE WHEN TO_CHAR(SUBSTR(i.TIPO_DO_ITEM,1,1)) = 1 THEN 'MEDICAMENTO' ELSE 'PERFUMARIA' END, i.QTD_PEDIDO_PENDENTE, PE.QUANTIDADE_ARMAZENADA, PE.QUANTIDADE_RESERVADA, i.CUSTO_MEDIO, i.QUANTIDADE_NA_EMBALAGEM_PADRAO, CDI.QTDE_UNIDADES_EMBALAGEM_PADRAO, (i.media_venda_mes/22,0) ) TMP
GOSTEI 1
Anderson Pereira
26/01/2021
Ficou perfeito agora.
A informação do distinct desconhecia que tendo o Group By não era necessário, muito obrigado por esta informação também.
A informação do distinct desconhecia que tendo o Group By não era necessário, muito obrigado por esta informação também.
GOSTEI 0