2013-03-21 15 views
5

Ho una query SQL come sotto,SQL Alias ​​Nome colonna da utilizzare in caso Dichiarazione

select Site,DataSource, 
(SELECT CASE 
    WHEN DataSource = 'RFQ' THEN 'ChangeOperator' 
    ELSE 'SameOperator' 
    END) AS OperatorScenario, 

    (SELECT CASE 
    WHEN OperatorScenario = 'ChangeOperator' THEN '1' 
    ELSE '022' 
    END) AS OperatorScenario2 
from tablename 

quando eseguo questa query sto ottenendo eccezione come non valido nome della colonna OperatorScenario. Così ho cercato di usare i codici singoli in nome alias nella seconda query come sotto,

(SELECT CASE 
    WHEN 'OperatorScenario' = 'ChangeOperator' THEN '1' 
    ELSE '022' 
    END) AS OperatorScenario2 

Così allora esegue parte sempre altro. Per favore, dammi qualche suggerimento. Saluti sangeetha

risposta

6

Il problema principale è che non è possibile fare riferimento a un alias nella stessa query. Inoltre hai parentesi e una parola chiave extra SELECT, rendendo ciò che assomiglia a una sottoquery in cui non credo tu ne abbia inteso uno (non hai una clausola FROM).

sia È possibile copiare nuovamente il tutto (fissaggio la query nel processo):

SELECT Site, DataSource, 
    CASE 
     WHEN DataSource = 'RFQ' THEN 'ChangeOperator' 
     ELSE 'SameOperator' 
    END AS OperatorScenario, 

    CASE 
     WHEN 
      CASE 
       WHEN DataSource = 'RFQ' THEN 'ChangeOperator' 
       ELSE 'SameOperator' 
      END = 'ChangeOperator' THEN '1' 
     ELSE '022' 
    END AS OperatorScenario2 
from tablename 

Oppure, semplificando:

SELECT Site, DataSource, 
    CASE 
     WHEN DataSource = 'RFQ' THEN 'ChangeOperator' 
     ELSE 'SameOperator' 
    END AS OperatorScenario, 

    CASE 
     WHEN DataSource = 'RFQ' THEN '1' 
     ELSE '022' 
    END AS OperatorScenario2 
from tablename 

Oppure utilizzare un CTE (di nuovo fissare il vostro query):

WITH cte AS 
(
    SELECT Site, DataSource, 
    CASE 
     WHEN DataSource = 'RFQ' THEN 'ChangeOperator' 
     ELSE 'SameOperator' 
    END AS OperatorScenario, 
    FROM tablename 
) 
SELECT Site, DataSource, OperatorScenario, 
    CASE 
     WHEN OperatorScenario = 'ChangeOperator' THEN '1' 
     ELSE '022' 
    END AS OperatorScenario2 
FROM cte 
3

Non è possibile accedere a t egli alias allo stesso livello in questa query, utilizzare un sub-query o un CTE:

WITH cte 
    AS (SELECT site, 
       datasource, 
       CASE 
        WHEN datasource = 'RFQ' THEN 'ChangeOperator' 
        ELSE 'SameOperator' 
       END AS OperatorScenario 
     FROM dbo.tablename) 
SELECT site, 
     datasource, 
     operatorscenario, 
     CASE 
     WHEN operatorscenario = 'ChangeOperator' THEN '1' 
     ELSE '022' 
     END AS OperatorScenario2 
FROM cte 

Nota che ho anche tolto i parantheses extra e selezionare nel CASE.

0

ho impostato la mia alias all'inizio come questo:

SELECT [ALIAS] = CASE.... 

Distinti sarebbe:

SELECT Site, DataSource, 
    [OperatorScenario] = CASE 
     WHEN DataSource = 'RFQ' THEN 'ChangeOperator' ELSE 'SameOperator' 
    END, 

    [OperatorScenario2] = CASE 
     WHEN DataSource = 'RFQ' THEN '1' ELSE '022' 
    END 
from tablename 
Problemi correlati