2017-06-01 4 views
1

Ich versuche, wie viele „Tochtergesellschaften“ Arbeit zu zählen, für jede „Muttergesellschaft“, kam ich mit so etwas wie dies oben ...Erstellen Sie eine Abfrage mit GROUP BY

select cs.contract_number, jd.Job_description, c.Parent_Company, 
     count(sub.subsidiary_company) 
from contracts cs 
    join Job jd 
     on jd.ID = cs.ID 
    join Company c 
     on cs.Company_ID = c.Company_ID 
    join Sub_Company sub 
     on c.Company_ID = sub.Prime 
group by cs.contract_number, jd.Job_description, c.Parent_Company; 

Dies ist ein Beispiel für das Ergebnis, das ich suche ... Table Structure

jedoch bekomme ich nicht die Ergebnisse, die ich brauche. Ich versuche, eine Abfrage zu erstellen, die die eindeutige Anzahl von "Tochtergesellschaften" anzeigt, die unter jeder "Muttergesellschaft" für jede "Jobbeschreibung" arbeiten. Kannst du bitte helfen? Vielen Dank.

+0

Helfen Sie uns, Ihnen zu helfen - Bitte teilen Sie Ihre Tabellenstruktur, einige Beispieldaten, das Ergebnis, das Sie für dieses Beispiel erhalten, und das Ergebnis, das Sie dafür erhalten möchten. – Mureinik

+0

Ich hoffe, dieses Bild hilft. – caa35

+0

@Mureinik wird dieses Bild helfen? – caa35

Antwort

1

Für eine bessere Hilfe benötigen Sie Tabellenstrukturen und Beispieldaten in ein leicht konsumierbaren Format so bieten:

-- Table structure and sample data 
DECLARE @contracts TABLE (Id int identity, contract_number varchar(100), Company_Id int); 
DECLARE @job TABLE (Id int identity, Job_description varchar(100)); 
DECLARE @Company TABLE (Company_Id int identity, parent_company varchar(100)); 
DECLARE @Sub_Company TABLE (Company_Id int, Parent_Company_Id int); 

INSERT @contracts(contract_number, Company_Id) 
    VALUES ('001122',1), ('009922',1), ('123ABC',2), ('XXXYYYZZZ',2); 
INSERT @job(Job_description) 
    VALUES ('Fun stuff'), ('Hard Stuff'), ('Dumb stuff'); 
INSERT @Company(parent_company) 
    VALUES ('A Co'), ('B Co'); 
INSERT @Sub_Company(Parent_Company_Id, Company_Id) 
    VALUES (1,10), (1,11), (1, 20), (1, 30), (2, 400), (2, 500); 

-- Select statements to review the data 
SELECT * FROM @contracts; 
SELECT * FROM @Company; 
SELECT * FROM @job; 
SELECT * FROM @Sub_Company; 

Sie können einfach/einfügen Code des oben kopieren und lokal ausgeführt.

Ich versuche, eine Abfrage zu erstellen, die die Anzahl der eindeutigen Werte „Tochtergesellschaften“ zeigt, die für jede „Stellenbeschreibung“ unter jeder „Muttergesellschaft“ arbeiten.

Ihre GROUP BY-Anweisung wird wie folgt aussehen:

group by jd.Job_description, c.Parent_Company, cs.contract_number 

Ihre Lösung etwas wie dieses

-- Table structure and sample data 
DECLARE @contracts TABLE (Id int identity, contract_number varchar(100), Company_Id int); 
DECLARE @job TABLE (Id int identity, Job_description varchar(100)); 
DECLARE @Company TABLE (Company_Id int identity, parent_company varchar(100)); 
DECLARE @Sub_Company TABLE (Company_Id int, Parent_Company_Id int); 

INSERT @contracts(contract_number, Company_Id) 
    VALUES ('001122',1), ('009922',1), ('123ABC',2), ('XXXYYYZZZ',2); 
INSERT @job(Job_description) 
    VALUES ('Fun stuff'), ('Hard Stuff'), ('Dumb stuff'); 
INSERT @Company(parent_company) 
    VALUES ('A Co'), ('B Co'); 
INSERT @Sub_Company(Parent_Company_Id, Company_Id) 
    VALUES (1,10), (1,11), (1, 20), (1, 30), (2, 400), (2, 500); 

-- solution 
select jd.Job_description, c.Parent_Company, cs.contract_number, total = count(DISTINCT Sub.Company_Id) 
from @contracts cs 
join @job jd on jd.ID = cs.ID 
join @Company c on cs.Company_ID = c.Company_ID 
join @Sub_Company sub on c.Company_ID = sub.Parent_Company_Id 
group by jd.Job_description, c.Parent_Company, cs.contract_number ; 

Aktualisieren, um die Beispieldaten aussehen werde ich die richtigen Spalten enthalten bereitgestellt und Aktualisieren Sie die Beispieldaten, um genauer zu sein. Nächster Beitrag ein Screenshot oder etwas, das zeigt, was Sie wollen. Tun Sie das und Sie werden schnell gute Hilfe bekommen.