SQL Alias Column Name Needed In CASE WHEN Statement

how to use alias name in case statement in sql
how to give alias name in case statement in oracle
multiple case when sql
case statement in cte sql
db2 sql case statement multiple conditions
sql case statement in where clause multiple values
sql select as table
complex case statement in sql

How can I reference the alias "New Date?" I keep getting an "Invalid column name 'NewDate'" error.

CASE
    WHEN p.Program IN ('program1') THEN (date_needed + 10)
    WHEN p.Program IN ('program2') THEN (date_needed + 20)
END AS [NewDate]

CASE 
    WHEN date_needed < [NewDate] THEN 'Program On Time' 
    ELSE 'Program Late'
END AS [Modified New Date]

Nest the CASE

SELECT
CASE 
    WHEN CASE
           WHEN p.Program IN ('program1') THEN (date_needed + 10)
           WHEN p.Program IN ('program2') THEN (date_needed + 20)
         END < [NewDate] THEN 'Program On Time' 
    ELSE 'Program Late'
END AS [Modified New Date]

Or use a sub-query, or CTE...

WITH CTE AS(
SELECT
CASE
    WHEN p.Program IN ('program1') THEN (date_needed + 10)
    WHEN p.Program IN ('program2') THEN (date_needed + 20)
END AS [NewDate], date_needed
FROM YourTable)

SELECT
CASE 
    WHEN date_needed < [NewDate] THEN 'Program On Time' 
    ELSE 'Program Late'
END AS [Modified New Date]
FROM CTE

how can I use a CASE with an alias defined befor case?, OK, I'll take the provided example, and modify it a bit: select (<insanely complex expression>) as pop, case when pop is null then 'isnull' end  SQL allows the use of both column aliases and table aliases. This is done using the SQL AS keyword, which is an optional keyword in many SQL statements including SELECT, UPDATE, and DELETE. Column aliases allow you to use a different and often simpler name for a column in your query.

Because of logical query processing order, it is not possible to reference NewDate column in same block. To achieve this you can use common table expression as follows:

WITH Base_CTE
AS
(
SELECT CASE
    WHEN p.Program IN ('program1') THEN (date_needed + 10)
    WHEN p.Program IN ('program2') THEN (date_needed + 20)
END AS [NewDate], date_nedded
FROM tablename
)
SELECT CASE 
    WHEN date_needed < [NewDate] THEN 'Program On Time' 
    ELSE 'Program Late'
END AS [Modified New Date]
FROM Base_CTE; 

SQL Aliases, Aliases are often used to make column names more readable. An alias only exists for the duration of the query. Alias Column Syntax. SELECT column_name AS  I am trying to retrieve a value for a alias column using case statement. CASE WHEN FieldA = 'TestA' THEN FieldA1 WHEN FieldB = 'TestB' THEN FieldB1 ELSE NULL END AS Alias1 But when

You can use apply or subquery :

select p.*, (case when p.date_needed < p1.NewDate 
                  then 'Program On Time' 
                  else 'Program Late' 
              end) as [Modified New Date]
from table p cross apply
     ( values (  case when p.Program = 'program1' 
                      then (date_needed + 10)
                      when p.Program = 'program2' 
                      then (date_needed + 20)
                  end
              )
     ) p1(NewDate);

Assign Names to Columns without Known Names, There are two ways to name columns returned from unnest or table functions. we define column names using the create statement and alias them in select if needed. This is not the case when using table functions, unnest or values . In MySql, alice name may not work, therefore put the original column name in the CASE statement SELECT col1 as a, CASE WHEN col1 = 'test' THEN 'yes' END as value FROM table; Sometimes above query also may return error, I don`t know why (I faced this problem in my two different development machine).

I'm a fan of apply for this purpose:

SELECT v.date_needed,
       (CASE WHEN v.date_needed < [NewDate] THEN 'Program On Time' 
             ELSE 'Program Late'
        END) AS [Modified New Date]
FROM t CROSS APPLY
     (VALUES (CASE WHEN t.Program IN ('program1') THEN (date_needed + 10)
                   WHEN t.Program IN ('program2') THEN (date_needed + 20)
              END)
     ) v(date_needed)

Aliasing Table And Column Names in the FROM clause, You might already know how to alias0 column names and tables names. That is the case for the result of table functions, unnest and values . columns in the from clause was already required by intermediate level SQL-923 but has become​  I then want to use the data in the MTH_NUM column within a CASE statement to produce something like this: << You can use the datapart () function as the control in the CASE expression. There is no need to create a local variable. This is because SQL has strong orthogonality.

SQL Server Alias, This tutorial introduces you to the SQL Server alias including column alias and table alias. statement to query data from a table, SQL Server uses the column names as full name column as ( No column name ) which is not meaningful in this case. Note that if the column alias contains spaces, you need to enclose it in  Column alias is added in the SELECT statement immediately after the column name. Optionally, you can add the keyword AS in between the column name and the column alias to clearly indicate the use of alias. Use column alias if the original column name does not meet your requirements.

SQL CASE, The CASE statement is SQL's way of handling if/then logic. and adds an additional column that displays the player's name if that player is a junior or senior. Try it out See the But what if you also wanted to count a couple other conditions? Alternatively, you can use the column's alias in the GROUP BY clause like this: SQL aliases are used to give a table, or a column in a table, a temporary name. Aliases are often used to make column names more readable. An alias only exists for the duration of the query.

SQL CASE Statement - Simple and Searched Forms, The SQL CASE statement returns a value based on one or more conditional tests​. In particular it is used in the SELECT column list, GROUP BY, HAVING, and BY and replacing it with the SELECT list CASE expression's alias name PriceRange as so: Hi Kris, I want to have some practice problem on CASE expression. ok..reason is AnesthRisk2 is an alias given inline in same select so you can use it directly in case when. if you want to use it like that you need to first form a derived table with alias and use case over it. like below: select *, case when (AnesthRisk2 > 2) then 1, else 0 end as Anesthrisk from

Comments
  • Scope issue. You need a sub-query.
  • If you don't want to subquery, perhaps for performance reasons, you could also inline the first CASE expression, replacing the [NewDate] marker in second CASE expression.
  • Be very careful here. You are using basic addition syntax for adding days to a date. This doesn't always work. sqlblog.org/2011/09/20/…
  • Totally unrelated: I saw that your flagged for "editing" on the triage queue for stackoverflow.com/review/triage/20799771 ... simply: wrong decision. This question requires the OP to remove the screen shots, and to put the corresponding text into the question as text. Only the OP should do such things. So please keep in mind: only triage for editing when other people can edit the question. Anything that requires the owner to improve the content, should not go "edit".
  • Thanks for the feedback @GhostCat
  • You are welcome. Thanks for the re-feedback. And just in case you are wondering: I noticed that because I am currently working on the "Help and improve" queue. The one that gets fed the "edit" triages. And finding such content there is simply a bad thing.