|
Query
Last post 02-08-2007, 4:44 PM by rsocol. 9 replies.
-
02-05-2007, 11:25 AM |
-
sqlnewbie
-
-
-
Joined on 02-05-2007
-
-
db_datawriter
-
-
|
Buna ziua, Mi-e si jena sa pun o astfel de intrebare aici, dar pana la urma o sa o fac. Am 3 tabele. Una de parteneri cu: partenerid(PK), denumire, adrid(FK), divizieid(FK) Una de adrese: adrid (PK), orasid(FK), strada, numar, bloc, etc. Si una de divizii cu: divizieid(PK), descriere. Am 5 divizii. Pe fiecare divizie am niste agenti de vanzare (care sunt in alte tabele si nu-si au rostul in intrebarea mea, dar am vrut sa lamuresc situatia). Vreau sa vad toti partenerii cu adresele aferente pe 3 din cele 5 divizii, chiar daca pe unele dintre ele nu au nici un agent activ . e.g.: partenerul nr.1 are divid 1 si 2, dar eu vreau sa ii afisez : partener1 adresa div1 agent partener1 adresa div2 agent
partener1 adresa div3 agent (chiar daca nu are agent si/sau divizie alocata in tabela de parteneri) Am incercat sa fac outer join cu tabela de divizie, dar nu-mi aduce toate diviziile, doar cele ce au id-ul specificat in tabela de parteneri. Multumesc frumos de ajutor
|
|
-
02-05-2007, 11:32 AM |
-
02-05-2007, 12:19 PM |
-
katalyn
-
-
-
Joined on 09-20-2006
-
Bucureşti
-
sysadmin
-
-
|
CREATE DATABASE Test1 GO USE test1 GO CREATE TABLE Orase( orasid int IDENTITY PRIMARY KEY, Denumire nvarchar(20), ) GO CREATE TABLE Divizii( divizieid int PRIMARY KEY, descriere nvarchar(40) ) GO CREATE TABLE Adrese ( adrid int IDENTITY PRIMARY KEY, orasid int FOREIGN KEY REFERENCES Orase(orasid), strada nvarchar(20), numar varchar(4), bloc varchar(4) ) GO CREATE TABLE Parteneri ( partenerid int IDENTITY PRIMARY KEY, denumire nvarchar(20), adrid int FOREIGN KEY REFERENCES Adrese(adrid), divizieid int FOREIGN KEY REFERENCES Divizii(divizieid) ) GO INSERT INTO Orase(Denumire) VALUES('Bucuresti') INSERT INTO Orase(Denumire) VALUES('Constanta') INSERT INTO Orase(Denumire) VALUES('Cluj') GO INSERT INTO Divizii(Descriere) VALUES('Div1') INSERT INTO Divizii(Descriere) VALUES('Div2') INSERT INTO Divizii(Descriere) VALUES('Div3') INSERT INTO Divizii(Descriere) VALUES('Div4') INSERT INTO Divizii(Descriere) VALUES('Div5') GO INSERT INTO Adrese(orasid, strada, numar, bloc) VALUES (1,'Magheru','2BIS','A1') INSERT INTO Adrese(orasid, strada, numar, bloc) VALUES (2,'Unirii','5','A') INSERT INTO Adrese(orasid, strada, numar, bloc) VALUES (3,'Stefan Cel Mare','2','V1') GO INSERT INTO Parteneri(denumire, adrid,divizieid) VALUES ('Ion',3,1) INSERT INTO Parteneri(denumire, adrid,divizieid) VALUES ('Ion',3,3) INSERT INTO Parteneri(denumire, adrid,divizieid) VALUES ('Grigore',2,2) INSERT INTO Parteneri(denumire, adrid,divizieid) VALUES ('Grigore',2,1) INSERT INTO Parteneri(denumire, adrid,divizieid) VALUES ('Popescu',4,1) GO SELECT * FROM adrese SELECT * FROM parteneri SELECT * FROM divizii GO SELECT p.denumire, a.strada, a.numar, a.bloc, d.descriere FROM divizii d left join parteneri p ON d.divizieid=p.divizieid left join adrese a ON p.adrid=a.adrid ORDER BY d.divizieid, p.denumire GO USE TempDB GO DROP DATABASE Test1
La asta te-ai referit? daca nu.... eventual pune aici scriptul de creare a tabelelor si pune mai multe detalii despre ce rezultat ai nevoie.
Cătălin D.
|
|
-
02-05-2007, 12:30 PM |
-
ggciubuc
-
-
-
Joined on 03-18-2006
-
Bucharest
-
sysadmin
-
-
|
Tocmai tabela cu agentii lipseste pentru a-mi face o idee de ce inseamna agent activ/inactiv! banuiesc ca tabela de agenti se leaga de cea de divizii prin divizieid si ca divizieid nu e specificat pt agentii inactivi; in aceasta situatie se apeleaza la left(right) join , depinde cum privesti tabelele. Altfel, daca indicatorul de activ/inactiv este un flag se face un view cu where-ul de rigoare prin interfata.
Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
|
|
-
02-05-2007, 1:51 PM |
-
sqlnewbie
-
-
-
Joined on 02-05-2007
-
-
db_datawriter
-
-
|
O sa mai dau niste informatii, se pare ca m-am grabit si am fost prea succint Acestea sunt tabelele folosite pt query-ul meu
parteneri p locatii l adrese a orase o judete j parteneriagenti pa clasificaridivizii v personal sp persoanefizice pf select CodPArtener = p.cod, Partener = p.denumire, l.Locatie, Judet = isnull(j.Nume, ''), Oras = isnull(o.Nume, ''), Strada = isnull(a.Strada, ''), Numar = isnull(a.strada_nr, ''), Divizie = isnull(pa.Divizie, ''), Agent = isnull(pa.Agent, '') from dbo.parteneri p with(nolock) inner join locatii l with(nolock) on l.locatie_id = p.locatieid inner join adrese a with(nolock) on a.adresa_id = p.adresa_principala_id inner join orase o with(nolock) on o.oras_id = a.oras_id inner join judete j with(nolock) on j.judet_id = o.judet_id left join ( Select pa.fkpartener, descriere as Divizie, pf.Nume as Agent from ParteneriAgenti dpa with(nolock) inner join clasificaridivizii v with(nolock) on v.PK_CLASIFICARI_VALORI = pa.divizieid inner join Personal pers with(nolock) on pa.FkAngajat = pers.Angajat_Id inner join PersoaneFizice pf with(nolock) on pers.Persoane_Fizice_Id = pf.Persoane_Fizice_Id )pa on pa.fkpartener = p.partener_id
Acela era query-ul meu. Parteneriagenti tine si id-ul de divizie cat si cel de agent. Stiu ca-mi scapa ceva banal undeva, dar nu pot sa localizez exact buba. M-am gandit sa fac si un UNION cu tabela de divizii sa iau restul, dar nu cred ca e asta solutia. Edit: am corectat aliasurile
|
|
-
02-05-2007, 1:55 PM |
-
02-05-2007, 2:29 PM |
-
02-05-2007, 2:44 PM |
-
sqlnewbie
-
-
-
Joined on 02-05-2007
-
-
db_datawriter
-
-
|
aliasurile sunt bune, le-am schimbat eu numele sa nu fie exact ca cele din baza. Se poate sa-mi fi mai scapat un alias gresit, dar va asigur ca query-ul functioneaza, rezultatul nu este cel scontat.
|
|
-
02-06-2007, 8:40 AM |
-
02-08-2007, 4:44 PM |
-
rsocol
-
-
-
Joined on 10-03-2006
-
Bucuresti
-
sysadmin
-
-
|
Care e tabela cu divizii ? Altfel spus, care e prefixul pentru "descriere" ? Există vreo coloana în tabela cu divizii care să fie foreign key spre parteneri.parteneri_id ? Dacă da, cum se numeşte ? Dacă nu, asta înseamna că nu poate exista o divizie fără sa aiba alocat un agent ? Care din urmatoarele coloane permite NULL-uri şi care sunt "required": p.locatie_id, p.adresa_principala_id, a.oras_id, o.judet_id, v.PK_CLASIFICARI_VALORI, pa.FkAngajat, pers.Persoane_Fizice_Id ?
Dacă vreuna din coloanele care ar fi trebuit sa fie "required" permite totuşi NULL-uri, verifică să nu existe niciun NULL şi modifică-le să nu mai permită NULL-uri. Există foreign key-uri pentru toate coloanele pe care ai făcut JOIN ?
Răzvan PS. Dacă ai fi postat DDL şi sample data, aşa cum am menţionat mai sus, puteam să aflu singur răspunsurile la întrebarile pe care le-am scris.
|
|
|
|
|