By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE Proveedor (
idProveedor int identity(1,1) NOT NULL,
RazonSocial nvarchar (max) NOT NULL,
CONSTRAINT PK_Proveedor PRIMARY KEY (idProveedor),
)
CREATE TABLE Servicio(
idServicio int identity (1,1) NOT NULL,
TipoServicio nvarchar(35) NOT NULL,
CONSTRAINT PK_Servicio PRIMARY KEY (idServicio)
)
CREATE TABLE Equipo(
idEquipo int identity (1,1) NOT NULL,
TipoEquipo nvarchar(35) NOT NULL
CONSTRAINT PK_Equipo PRIMARY KEY (idEquipo)
)
CREATE TABLE Rel_ProvServicio(
idProveedor int NOT NULL,
idServicio int NOT NULL,
CONSTRAINT FK_ProvServicio FOREIGN KEY (idProveedor) REFERENCES Proveedor(idProveedor),
CONSTRAINT FK_ServicioProv FOREIGN KEY (idServicio) REFERENCES Servicio(idServicio)
)
CREATE TABLE Rel_ProvEquipo(
idProveedor int NOT NULL,
idEquipo int NOT NULL,
CONSTRAINT FK_ProvEquipo FOREIGN KEY (idProveedor) REFERENCES Proveedor(idProveedor),
CONSTRAINT FK_EquipoProv FOREIGN KEY (idEquipo) REFERENCES Equipo(idEquipo)
)
--DATA PROVIDER
INSERT INTO PROVEEDOR (RazonSocial) VALUES ('Provider 1')
INSERT INTO PROVEEDOR (RazonSocial) VALUES ('Provider 2')
INSERT INTO PROVEEDOR (RazonSocial) VALUES ('Provider 3')
Msg 207 Level 16 State 1 Line 65
Invalid column name 'idServices'.
SELECT
P.RazonSocial as [Razon Social Proveedor],
(
SELECT STRING_AGG(S.TipoServicio, '; ')
FROM Rel_ProvServicio ps
INNER JOIN Servicio S ON ps.idServicio = S.idServicio
WHERE ps.idProveedor = P.idProveedor
) AS Servicios,
(
SELECT STRING_AGG(E.TipoEquipo, '; ')
FROM Rel_ProvEquipo pe
INNER JOIN Equipo E ON pe.idEquipo = E.idEquipo
WHERE pe.idProveedor = P.idProveedor
) AS Equipos
FROM Proveedor P
ORDER BY P.idProveedor;
Razon Social Proveedor | Servicios | Equipos |
---|---|---|
Provider 1 | Service 1; Service 2; Service 3 | Equipment 1; Equipment 2; Equipment 3 |
Provider 2 | null | Equipment 1; Equipment 2; Equipment 3 |
Provider 3 | null | null |