6 votes

Comment ajouter des en-têtes de colonne de tableau à une instruction sql select ?

J'ai une instruction de sélection SQL comme celle-ci :

select FirstName, LastName, Age from People

Cela me renverra quelque chose comme un tableau :

Peter  Smith    34
John   Walker   46
Pat    Benetar  57

Ce que je veux, c'est insérer les titres des colonnes dans la première ligne, comme suit :

First Name  Last Name  Age
=========== ========== ====
Peter       Smith      34
John        Walker     46
Pat         Benetar    57

Quelqu'un peut-il suggérer comment cela pourrait être réalisé ?

Pourriez-vous créer un tableau temporaire avec les rubriques et y ajouter les données ?

8voto

RichardTheKiwi Points 58121

Aucune des réponses ci-dessus ne fonctionnera, sauf si tous vos noms viennent après "premier" dans l'ordre de tri.

Select FirstName, LastName
from (
    select Sorter = 1, FirstName, LastName from People
    union all
    select 0, 'FirstName', 'LastName') X
order by Sorter, FirstName   -- or whatever ordering you need

Si vous voulez faire cela pour toutes les colonnes non-varchar également, les CONS sont (au moins) :

  1. TOUTES vos données deviendront VARCHAR. Si vous utilisez Visual Studio par exemple, vous ne pourrez PLUS reconnaître ou utiliser les valeurs de date. Ou les valeurs int. Ni aucune autre valeur d'ailleurs.
  2. Vous devez fournir explicitement un format aux valeurs de type date comme DOB. Les valeurs DOB en Varchar au format dd-mm-yyyy (si vous choisissez de les transformer en ce format) ne seront pas triées correctement.

Le SQL pour y parvenir, cependant non recommandé c'est

Select FirstName, LastName, Age, DOB
from (
    select Sorter = 1,
        Convert(Varchar(max), FirstName) as FirstName,
        Convert(Varchar(max), LastName)  as LastName,
        Convert(Varchar(max), Age)       as Age,
        Convert(Varchar(max), DOB, 126)  as DOB
    from People
    union all
    select 0, 'FirstName', 'LastName', 'Age', 'DOB') X
order by Sorter, FirstName   -- or whatever ordering you need

1voto

Dan J Points 10269

La façon la plus légère de le faire est probablement de faire une UNION :

SELECT 'FirstName' AS FirstName, 'LastName' AS LastName
UNION ALL
SELECT FirstName, LastName 
FROM People

Il n'est pas nécessaire de créer des tables temporaires.

0voto

Gerry Points 1

Le site UNION All est la solution sauf qu'il faut souligner que :

  1. Pour ajouter un en-tête à une colonne non carrée, il faudra convertir la colonne dans la première partie de la requête.
  2. Si la colonne convertie est utilisée dans l'ordre de tri, la référence au champ devra être le nom de la colonne dans la requête, et non la table.

exemple :

Select Convert(varchar(25), b.integerfiled) AS [Converted Field]...
... Order by [Converted Field]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X