मैं टेबल पर एक रिपोर्ट बनाने की कोशिश कर रहा हूं जिसे मैं संशोधित नहीं कर सकता और मुझे यकीन नहीं है कि यह भी संभव है।

नीचे दी गई स्क्रिप्ट का उपयोग करके, मैं एक क्वेरी परिणाम प्राप्त करने का प्रयास कर रहा हूं:

--Certification | Employee     | Has Certification
--CPR           | Santa Clause | Yes
--CPR           | Rudolph      | No

CREATE TABLE [dbo].[Certification]([Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
CONSTRAINT [PK_Certification] PRIMARY KEY CLUSTERED ([Id] ASC));

CREATE TABLE [dbo].[Employee]([Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED ([Id] ASC));

CREATE TABLE [dbo].[EmployeeCertification]([Id] [int] IDENTITY(1,1) NOT NULL,
[CertificationID] [int] NOT NULL,
[EmployeeID] [int] NOT NULL,
CONSTRAINT [PK_EmployeeCertification] PRIMARY KEY CLUSTERED ([Id] ASC));

ALTER TABLE [dbo].[EmployeeCertification] WITH CHECK ADD CONSTRAINT
[FK_EmployeeCertification_Certification] FOREIGN KEY([CertificationID])
REFERENCES [dbo].[Certification] ([Id])

ALTER TABLE [dbo].[EmployeeCertification] CHECK CONSTRAINT
[FK_EmployeeCertification_Certification]

ALTER TABLE [dbo].[EmployeeCertification] WITH CHECK ADD  CONSTRAINT
[FK_EmployeeCertification_Employee] FOREIGN KEY([EmployeeID])
REFERENCES [dbo].[Employee] ([Id])

ALTER TABLE [dbo].[EmployeeCertification] CHECK CONSTRAINT
[FK_EmployeeCertification_Employee]

INSERT INTO Certification (Name) VALUES ('CPR');
INSERT INTO Employee (Name) VALUES ('Santa Clause'),('Rudolph');
INSERT INTO EmployeeCertification (CertificationID,EmployeeID) VALUES(1,1);
0
user3140169 4 पद 2020, 20:43

1 उत्तर

सबसे बढ़िया उत्तर

आप सभी संभावित संयोजन उत्पन्न करने के लिए cross join कर्मचारी और प्रमाणन कर सकते हैं, फिर एक सबक्वेरी का उपयोग करके यह जांच सकते हैं कि ब्रिज टेबल में प्रत्येक टपल मौजूद है या नहीं:

select c.name as certification, e.name as employee,
    case when exists (
        select 1 
        from employeecertification ec 
        where ec.employeeid = e.id and ec.certificationid = c.id
    ) then 'Yes' else 'No' end as has_certification
from employee e
cross join certification c

यह एक left join के साथ भी किया जा सकता है:

select c.name as certification, e.name as employee,
    case ec.id is null then 'No' else 'Yes' end as has_certification
from employee e
cross join certification c
left join employeecertification ec on ec.employeeid = e.id and ec.certificationid = c.id
1
GMB 4 पद 2020, 17:46