Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да покажа резултата от заявката колонен (в различни колони) вместо ред по ред?

Може би нещо подобно:

Първо малко тестови данни:

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)

След това трябва да получите уникалните колони по следния начин:

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

Декарингът и изпълнението на динамичния 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)

И тогава в моя случай ще премахна създадените таблици:

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. Какво прави транзакцията около едно изявление?

  2. Има ли таблица, която съдържа списъка с описания на sysobjects.xtype?

  3. sp_add_schedule срещу sp_add_jobschedule в SQL Server:Каква е разликата?

  4. има ли някакъв начин да получите списъка с вградената функция на sql сървъра?

  5. Какво е STATISTICS PROFILE в SQL Server?