I'm new to SQL so please consider this noob question. Also, its so embarrassing to admit that I cannot search for the right keyword in Google and I'm running out of time so I decided to ask it here.
Code:
select
*,
price * quantity as [Total price],
case
when [Total price]>100 and [Total price]<= 200 then '2%'
when [Total price]>200 and [Total price]<= 300 then '3%'
when [Total price]>300 and [Total price]<= 400 then '4%'
else '0%'
end as tax
from
grocery
As you can see, what I am trying to do is try to create a temporary variable on execution of SQL statement but, this one gives me error
Error 1: could not prepare statement [1 no such column: Total price]
How could I do this ?
A quick way would be to use a CTE (Common Table Expression). This allows you to pre-calculate some values and then refer the values in the body of the query.
If a statement with a CTE isn't the first thing in a batch, you need to end the preceding stuff with a ;
:
;
With Totals as
(
select *,
price * quantity as [Total price],
from grocery
)
select *
, case
when [Total price]>100 and [Total price]<= 200 then '2%'
when [Total price]>200 and [Total price]<= 300 then '3%'
when [Total price]>300 and [Total price]<= 400 then '4%'
else '0%'
end as tax
from
Totals
The root of your problem, by the way, is that you can't define an expression and then use the expression by name in a query. You can re-use the expression, but not by name:
select x + 1 as Expr1
, (x + 1) * 2 as Expr2
from Table1
That will work, but the following won't work:
select x + 1 as Expr1
, Expr1 * 2 as Expr2 -- This won't work
from Table1
SELECT *,
case
when [Total price]>100 and [Total price]<= 200 then '2%'
when [Total price]>200 and [Total price]<= 300 then '3%'
when [Total price]>300 and [Total price]<= 400 then '4%'
else '0%'
end as tax
FROM (SELECT *, price * quantity as [Total price]
FROM grocery) A
OR
select
*,
price * quantity as [Total price],
case
when price * quantity >100 and price * quantity<= 200 then '2%'
when price * quantity>200 and price * quantity<= 300 then '3%'
when price * quantity>300 and price * quantity<= 400 then '4%'
else '0%'
end as tax
from
grocery
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With