Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

SCRIPT CASE

Professor estou escrevendo esse script mais está dados erro, em que posso está errando?

CASE
                    WHEN MgO_pct IS NULL
                        THEN MgO_pct
                    WHEN MgO_pct >=33
                        THEN (MgO_pct * 1.04581)-0.20922
                    WHEN MgO_pct <=33
                        THEN (MgO_pct * 1.00775)-0.08368
                    ELSE NULL
                END AS NiS_calc,
                CASE
                    WHEN NiS_calc >=0
                        THEN NiS_calc
                    WHEN NiS_calc < 0
                        THEN NiS_calc = 0				
                    ELSE NULL
                END AS NiS_greater,
6 respostas

Fernando,

Tem alguns códigos esquisitos... Aqui (">=33" e "<=33"):

WHEN MgO_pct >=33
    THEN (MgO_pct * 1.04581)-0.20922
WHEN MgO_pct <=33
    THEN (MgO_pct * 1.00775)-0.08368

Atribuição de valor? Pode aqui? (THEN NiS_calc = 0)

WHEN NiS_calc < 0
    THEN NiS_calc = 0				
ELSE NULL

Acho que você NÃO pode fazer um "alias" e depois usar o "alias" logo na sequencia...

use [AdventureWorks2022]
GO

SELECT ProductNumber,
    Name,
    CASE
        WHEN ListPrice = 0 THEN 'Mfg item - not for resale'
        WHEN ListPrice < 50 THEN 'Under $50'
        WHEN ListPrice >= 50 AND ListPrice < 250 THEN 'Under $250'
        WHEN ListPrice >= 250 AND ListPrice < 1000 THEN 'Under $1000'
        ELSE 'Over $1000'
        END AS Price_Range
    CASE
        WHEN Price_Range LIKE '%Under%' THEN 'UNDER'
        ELSE 'Upper!'
        END AS UNDER
FROM Production.Product
ORDER BY ProductNumber;
GO

Links referência:

==============================================

CASE (Transact-SQL)

Article - 05/23/2023

https://learn.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql?view=sql-server-ver16

==============================================

AdventureWorks sample databases

Article - 05/16/2023

https://learn.microsoft.com/en-us/sql/samples/adventureworks-install-configure?view=sql-server-ver16&tabs=ssms

==============================================

[]'s,

Fabio I.

Oii, Fernando! Tudo bem?

Agradeço por compartilhar o trecho do seu código, nele podemos realizar ajustes em dois pontos que estão causando os possíveis erros.

  1. Os parênteses na multiplicação, uma alternativa é retirá-los. Ficando com o código assim:
CASE

THEN MgO_pct * 1.04581 - 0.20922
WHEN MgO_pct <=33
THEN MgO_pct * 1.00775 - 0.08368
                  
  1. O segundo ponto é adicionar ponto e vírgula (;) no lugar da vírgula (,) em END AS NiS_calc, e END AS NiS_greater, , deixando o código assim:
CASE
                    WHEN MgO_pct IS NULL
                        THEN MgO_pct
                    WHEN MgO_pct >=33
                        THEN MgO_pct * 1.04581- 0.20922
                    WHEN MgO_pct <=33
                        THEN MgO_pct * 1.00775 - 0.08368
                    ELSE NULL
                END AS NiS_calc;
                CASE
                    WHEN NiS_calc >=0
                        THEN NiS_calc
                    WHEN NiS_calc < 0
                        THEN NiS_calc = 0				
                    ELSE NULL
                END AS NiS_greater;

Como é um projeto externo ao da aula e não tenho uma visão ampla do projeto, consegui identificar esses pontos que estão causando erro em seu script.

Aproveito para recomendar a documentação oficial do SQL para você aprofundar ainda mais seus conhecimentos em sintaxes, exemplos e conceitos em torno do tema. Segue o link:

A página pode aparecer em Inglês, caso aconteça basta clicar nela com o botão direito do mouse e escolher a opção "Traduzir para o português".

Espero que as dicas sejam um bom ponto de partida para você!

Bons estudos, Fernando!

Professor, boa tarde.

no tópico: Tem alguns códigos esquisitos... Aqui (">=33" e "<=33"): é um condicionante se o elemento for mair/igual ou menor igual a 33. Para seguir com os próximos calculos esse é um condicionante.

Para os demais vou realizar a substituição e testar!

obrigado!

Obrigado!

solução!

Fernando,

no tópico: Tem alguns códigos esquisitos... Aqui (">=33" e "<=33"): é um condicionante se o elemento for mair/igual ou menor igual a 33. Para seguir com os próximos calculos esse é um condicionante.

Okay, é um condicionante, mas você percebeu que o sinal de igual apareceu DUAS vezes? Qual das duas deve rodar caso o número seja exatamente "33"? Hum... sacou a redundância de código?

Agora veja essa redundância de texto absurda:

**"Pessoa Monitora". **

Ué? Existem Monitoras que NÃO são "pessoas"?!? Monitores do gênero canino ou gênero felino, por exemplo?

... estranho, não acha? Huhuauhahuahuha... agora foi zueira em gênero, número e grau... desculpe, não me contive desta vez... Soltei os cachorros... do gênero canino, claro... KKKKK!!!

[]'s,

Fabio I.