Có thể như thế này:
Đầu tiên một số dữ liệu thử nghiệm:
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)
Sau đó, bạn phải lấy các cột duy nhất như sau:
DECLARE @cols VARCHAR(MAX)
SELECT @cols = COALESCE(@cols + ','+
QUOTENAME('ClassNameAndCapacity'+CAST(ClassId AS VARCHAR(10))),
QUOTENAME('ClassNameAndCapacity'+CAST(ClassId AS VARCHAR(10))))
FROM
Class
Việc xóa và thực thi sql động:
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)
Và sau đó trong trường hợp của tôi, tôi sẽ bỏ các bảng đã tạo:
DROP TABLE Flight
DROP TABLE Class
DROP TABLE FlightCapacity