Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak wyświetlić kolumnę wyników zapytania (w różnych kolumnach) zamiast wiersz po wierszu?

Może coś takiego:

Najpierw trochę danych testowych:

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)

Następnie musisz uzyskać takie unikalne kolumny:

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

Delcarowanie i wykonanie dynamicznego 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)

A potem w moim przypadku porzucę utworzone tabele:

DROP TABLE Flight
DROP TABLE Class
DROP TABLE FlightCapacity



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj 1 górny wiersz z każdej grupy

  2. Obejście dla obsługi kursora nie jest zaimplementowaną funkcją dla błędu SQL Server Parallel DataWarehousing TDS

  3. Sprawdzenie, czy dana data mieści się w zakresie dat

  4. Jak wyczyścić dziennik transakcji programu SQL Server?

  5. Sprawdź, czy tabela ma DEFAULT ograniczenie w SQL Server za pomocą OBJECTPROPERTY()