9
votes

Alias ​​dynamiques dans la déclaration SQL

Je souhaite afficher le nom d'alias basé sur la valeur d'un autre nom de colonne dans la requête dans SQL Server. Par ex.

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


0 commentaires

5 Réponses :


1
votes

Vous auriez besoin de retourner le montant en tant que "montant" puis de retourner une colonne supplémentaire contenant le "type" pour ce montant.

i.e.g xxx


0 commentaires

2
votes

Le nom "Alias" est le nom de la colonne entière des données que vous retournez. Il n'est pas possible pour cela de changer de base "par rang".

La seule façon de changer de nom de colonne (alias) de manière dynamique utilise dynamique SQL pour accumuler votre requête. Cependant, cela ne semble pas être ce que vous voulez faire.


1 commentaires

Et à cela, même Dynamic SQL ne pourra choisir qu'un nom pour l'alias pour une requête entièrement donnée.



1
votes

Non peut faire ...

SQL renvoie un rectorge que ne peut avoir qu'un seul nom / alias par chaque colonne .
Quel nom choisirait-il l'exemple de son indiquant si certains enregistrements renvoyés par la requête étaient «individuels» et certains étaient un autre type?

Bien sûr, comme suggéré dans plusieurs réponses, vous pouvez modifier le nombre de colonnes renvoyées par la requête et nommer chaque colonne à votre guise, mais traiter avec un tel ensemble de résultats pouvant alors nécessiter une logique supplémentaire, qui vaincrait le but comme si On voulait une logique supplémentaire, il / elle peut simplement sélectionner à la fois le montant et le type et travailler ces valeurs pour la nommage d'attribut, etc. au niveau de l'application ...


0 commentaires

12
votes

Je ne sais pas si vous pouvez ajouter des alias dynamiques, mais vous devriez pouvoir faire quelque chose comme ceci (si vous n'avez que quelques alias possibles):

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


2 commentaires

+1 Bon endroit, cela peut réellement faire ce qu'il est après. N'a pas pensé à cela.


Merci, c'est certainement l'accord le plus proche que je puisse obtenir



0
votes

Une colonne peut avoir un seul et un seul nom. Si votre rowset contenait une seule ligne, vous pouvez d'abord regarder la colonne de type de la ligne, puis modifier le nom de la colonne de manière appropriée pour la sélection. S'il contient plusieurs rangées, il n'est tout simplement pas possible.

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


0 commentaires