sql >> Database >  >> RDS >> Sqlserver

Hoe het queryresultaat kolomvormig (in verschillende kolommen) te tonen in plaats van rij voor rij?

Misschien zoiets als dit:

Eerst wat testgegevens:

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)

Dan moet je de unieke kolommen als volgt krijgen:

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

Het delcaren en uitvoeren van de dynamische sql:

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)

En dan zal ik in mijn geval de gemaakte tabellen laten vallen:

DROP TABLE Flight
DROP TABLE Class
DROP TABLE FlightCapacity



  1. Laravel berekent de som van twee kolommen met een voorwaarde

  2. MySql cursors.execute() met slechts één parameter:Waarom wordt een string in een lijst gesegmenteerd?

  3. SQL:ISNULL-functie met ander type parameters

  4. SQL INSERT van SELECT