2009-10-14 39 views
9

Quiero mostrar el nombre del alias en función del valor de algún otro nombre de columna en la consulta en SQL Server. Por ej.Alias ​​dinámicos en la declaración SQL

SELECT P.Amount AS (CASE P.Type WHEN 'Individual' THEN 'Salary' ELSE 'Profit' END) 
    FROM Person P 

Sé que lo anterior no está bien, pero algo como esto ayudará.

Respuesta

12

No estoy seguro de si puede agregar alias dinámicos, pero debería ser capaz de hacer algo como esto (si solo tiene algunos posibles alias):

SELECT 
    CASE P.Type WHEN 'Individual' THEN P.Amount ELSE NULL END AS Salary, 
    CASE P.Type WHEN 'Individual' THEN NULL ELSE P.Amount END AS Profit 
FROM 
    Person p 
+0

+1 Buen lugar, esto realmente puede hacer lo que está buscando. No pensé en esto. –

+0

Gracias, este es definitivamente el trato más cercano que podría conseguir –

1

Debería devolver el Importe como "Importe" y luego devolver una columna adicional que contenga el "tipo" para esa cantidad.

i.e.g

SELECT P.Amount, CASE P.Type WHEN 'Individual' THEN 'Salary' ELSE 'Profit' END AS AmountType 
FROM Person P 
2

El nombre de "Alias" es el nombre de la columna completa de los datos va a devolver. No es posible que esto cambie "por fila".

La única manera en que puede cambiar el nombre de una columna (alias) dinámicamente es utilizando SQL dinámico para generar su consulta. Sin embargo, esto no parece ser lo que estás queriendo hacer.

+2

Y en eso, incluso el SQL dinámico solo podrá elegir UN nombre para el alias de una consulta determinada. – mjv

1

No se puede hacer ...

SQL devuelve un recorset cuales solo puede tener un nombre/alias por cada columna.
¿Qué nombre le daría? Ejemplo dado si algunos registros devueltos por la consulta eran 'Individual' y algunos eran de otro tipo?

Por supuesto, como se sugiere en varias respuestas, puede modificar el número de columnas devueltas por la consulta y nombrar cada columna como desee pero tratar con un conjunto de resultados que puede requerir lógica adicional, lo que vencería el propósito desde si uno quisiera una lógica extra, él/ella puede simplemente seleccionar tanto la Cantidad como el Tipo y trabajar estos valores para nombrar atributos y tal en el nivel de la aplicación ...

0

Una columna puede tener un solo nombre. Si su conjunto de filas solo contenía una fila, entonces podría mirar primero la columna Tipo de la fila y luego cambiar el nombre de la columna de manera apropiada para la selección. Si contiene múltiples filas, simplemente no es posible.

IF 1 = (SELECT COUNT(*) FROM Person P WHERE <where-criteria>) THEN 
    IF 'Individual' = (SELECT P.Type FROM Person P WHERE <where-criteria>) THEN 
     SELECT P.Amount AS Salary 
     FROM Person P 
     WHERE <where-criteria> 
    ELSE 
     SELECT P.Amount AS Profit 
     FROM Person P 
     WHERE <where-criteria> 
    END IF 
ELSE 
    SELECT P.Amount AS SalaryOrProfit 
    FROM Person P 
    WHERE <where-criteria> 
END IF 

Creo que es posible que deba volver a examinar su diseño.

Cuestiones relacionadas