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
5 Réponses :
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 p>
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". P>
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. P>
Et à cela, même Dynamic SQL ne pourra choisir qu'un nom pour l'alias pour une requête entièrement donnée.
Non peut faire ... p>
SQL renvoie un rectorge que ne peut avoir qu'un seul nom / alias par chaque colonne forte>. 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 ... P>
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? P>
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
+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
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