Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment afficher le résultat de la requête en colonne (dans différentes colonnes) au lieu de ligne par ligne ?

Peut-être quelque chose comme ça :

D'abord quelques données de test :

CREATE TABLE Flight(FlightId  int,FlightNumber varchar(10))
CREATE TABLE FlightCapacity(ID int,FlightIdRef int,ClassIdRef int,Capacity int)
CREATE TABLE Class(ClassId int,Name varchar(10))

INSERT INTO Class VALUES(1,'Y'),(2,'A')
INSERT INTO Flight VALUES(1,123),(2,423)
INSERT INTO FlightCapacity VALUES(1,1,1,10),(2,1,2,20),(3,2,2,10)

Ensuite, vous devez obtenir les colonnes uniques comme ceci :

DECLARE @cols VARCHAR(MAX)
SELECT  @cols = COALESCE(@cols + ','+
                QUOTENAME('ClassNameAndCapacity'+CAST(ClassId AS VARCHAR(10))),
                QUOTENAME('ClassNameAndCapacity'+CAST(ClassId AS VARCHAR(10))))
FROM 
    Class

Le delcaring et exécuter le sql dynamique :

DECLARE @query NVARCHAR(4000)=
N'SELECT
    *
FROM
(
SELECT
    Flight.FlightNumber,
    Class.Name+CAST(FlightCapacity.Capacity AS VARCHAR(100)) AS ClassName,
    ''ClassNameAndCapacity''+CAST(Class.ClassId AS VARCHAR(10)) AS ClassAndCapacity
FROM
    Flight
    JOIN FlightCapacity
        ON Flight.FlightId=FlightCapacity.FlightIdRef
    JOIN Class
        ON FlightCapacity.ClassIdRef=Class.ClassId
) AS p
PIVOT
(
    MAX(ClassName)
    FOR ClassAndCapacity IN('[email protected]+')
) AS pvt'

EXECUTE(@query)

Et puis dans mon cas je vais déposer les tables créées :

DROP TABLE Flight
DROP TABLE Class
DROP TABLE FlightCapacity