sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan viser man forespørgselsresultatet kolonneformet (i forskellige kolonner) i stedet for række for række?

Måske noget som dette:

Først nogle testdata:

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)

Så skal du få de unikke kolonner som denne:

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

Decaring og eksekver den dynamiske 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)

Og så vil jeg i mit tilfælde droppe de oprettede tabeller:

DROP TABLE Flight
DROP TABLE Class
DROP TABLE FlightCapacity



  1. Sådan installeres MySQL Workbench på Ubuntu

  2. Hvordan bruger man Oracle ORDER BY og ROWNUM korrekt?

  3. SQL RENAME TABLE kommando

  4. Oracle underforespørgsel kan ikke se variablen fra den ydre blok 2 niveauer og op