Search  
Friday, May 25, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Client/Server  JOIN 3 TABELE -...
 JOIN 3 TABELE -Alta Problema
 
 10/29/2011 3:05:37 AM
User is offlinejohny25
69 posts


JOIN 3 TABELE -Alta Problema
 (N/A)

Salut !

Am 3 tabele pe un server SQL Express.

Tabela 1 :

Tabela : FURNIZORI

FURN_ID

DENUMIRE

ADRESA

JUDET

111

Furnizor 1

Adresa 1

CT

222

Furnizor 2

Adresa 2

BV

333

Furnizor 3

Adresa 3

CJ

444

Furnizor 4

Adresa 4

TM

555

Furnizor 5

Adresa 5

AR

Tabela 2 :

Tabela : NIR

FURN_ID

NR_NIR

TOTAL_NIR

111

101

2000.00

111

102

4000.00

111

103

5000.00

222

201

4500.00

222

202

4500.00

333

303

2000.00

555

505

2000.00

555

506

4000.00

555

507

6000.00

Tabela 3 :

Tabela : PLATI FURNIZORI

FURN_ID

NR_NIR

SUMA_PLATITA

111

101

300.00

111

101

200.00

111

101

1000.00

111

102

4000.00

111

103

2500.00

222

201

1000.00

222

202

1000.00

555

507

1000.00

555

507

1000.00

Va rog sa ma ajutati sa generez citeva tabele din cele 3 de mai sus cu o comanda SELECT direct de pe server.

Tabela generata 1 :  Totalul de plata catre fiecare furnizor

Tabela : GENERATA DIN CELE TREI TABELE DE MAI SUS

FURN_ID

DENUMIRE

ADRESA

JUDET

TOTAL_DE PLATA

SUMA_PLATITA

DIFERENTA

111

Furnizor 1

Adresa 1

CT

11000.00

8000.00

3000.00

222

Furnizor 2

Adresa 2

BV

9000.00

2000.00

7000.00

333

Furnizor 3

Adresa 3

CJ

2000.00

0.00

2000.00

444

Furnizor 4

Adresa 4

TM

0.00

0.00

0.00

555

Furnizor 5

Adresa 5

AR

12000.00

2000.00

10000.00

 

Tabela generata  2 : Punctajul intre NIR-uri si platile catre furnizori

Tabela : GENERATA DIN CELE TREI TABELE DE MAI SUS

FURN_ID

DENUMIRE

ADRESA

JUDET

NR_NIR

TOTAL_NIR

SUMA_PLATITA

DIFERENTA

111

Furnizor 1

Adresa 1

CT

101

2000.00

300.00

500.00

111

Furnizor 1

Adresa 1

CT

101

 

200.00

 

111

Furnizor 1

Adresa 1

CT

101

 

1000.00

 

111

Furnizor 1

Adresa 1

CT

102

4000.00

4000.00

0.00

111

Furnizor 1

Adresa 1

CT

103

5000.00

2500.00

2500.00

222

Furnizor 2

Adresa 2

BV

201

4500.00

1000.00

3500.00

222

Furnizor 2

Adresa 2

BV

202

4500.00

1000.00

3500.00

333

Furnizor 3

Adresa 3

CJ

303

2000.00

0.00

2000.00

555

Furnizor 5

Adresa 5

AR

505

2000.00

0.00

2000.00

555

Furnizor 5

Adresa 5

AR

506

4000.00

0.00

4000.00

555

Furnizor 5

Adresa 5

AR

507

6000.00

1000.00

4000.00

555

Furnizor 5

Adresa 5

AR

507

 

1000.00

 

 

Stiu ca am primit de la dvs. un exemplu asemanator (si va multumesc pt. el) dar pur si simplu nu l-am putut adapta...

Este mai simplu sa descarc local tabelele separat si sa fac query tot local ?

Incerc sa uploadez si un fisier ZIP cu cele 5 tabele pe forum.

Va multumesc !

 

Exemplu Tabele 2.zip 
 10/29/2011 8:35:59 AM
User is offlinemmarius28
139 posts
5th


Re: JOIN 3 TABELE -Alta Problema
 (N/A)
SELECT 1:

select f.FURN_ID, f.DENUMIRE, f.ADRESA, f.JUDET, NVL(n.TOTAL_DE_PLATA, 0) AS TOTAL_DE_PLATA, NVL(p.SUMA_PLATITA, 0) AS SUMA_PLATITA, NVL(n.TOTAL_DE_PLATA, 0) - NVL(p.SUMA_PLATITA, 0) AS DIFERENTA
from furnizori f
left join (FURN_ID, sum(TOTAL_NIR) as TOTAL_DE_PLATA from nir GROUP BY FURN_ID) n on f.FURN_ID = n.FURN_ID
left join (select FURN_ID, sum(SUMA_PLATITA) as SUMA_PLATITA from plati group by FURN_ID) p on f.FURN_ID = p.FURN_ID

SELECT 2:

select f.FURN_ID, f.DENUMIRE, f.ADRESA, f.JUDET, n.NR_NIR, n.TOTAL_NIR, p.SUMA_PLATITA, n.TOTAL_NIR - NVL(p1.SUMA_PLATITA, 0) AS DIFERENTA from
furnizori f
join nir n on f.FURN_ID = n.FURN_ID
left join plati p on n.FURN_ID = p.FURN_ID and n.NR_NIR = p.NR_NIR
left join (select FURN_ID, NR_NIR, sum(SUMA_PLATITA) as SUMA_PLATITA from plati group by FURN_ID, NR_NIR) p1 on n.FURN_ID = p1.FURN_ID and n.NR_NIR = p1.NR_NIR

Coloana [diferenta] din [SELECT 2] se poate obtine in Oracle si cu o functie analitica gen: n.TOTAL_NIR - SUM(p.SUMA_PLATITA over p.FURN_ID, p.NR_NIR), in loc de select-ul din al 3-lea join, dar nu stiu care este echivalentul in SQLSERVER
 10/29/2011 8:52:28 PM
User is offlinejohny25
69 posts


Re: JOIN 3 TABELE -Alta Problema
 (N/A)

Multumesc mult !

Pentru Tabela generata 1 : Totalul de plata catre fiecare furnizor  sintaxa corecta este :

SELECT f.furn_id,f.denumire,f.adresa,f.judet,ISNULL(n.total_nir,0) AS total_nir,
ISNULL(p.SUMA_PLATITA,0) AS SUMA_PLATITA,ISNULL(n.total_nir,0)-ISNULL(p.SUMA_PLATITA,0) AS DIFERENTA
FROM furnizori f LEFT JOIN
(SELECT furn_id,sum(total_nir) AS total_nir from nir GROUP BY furn_id) n on f.furn_id=n.furn_id
 LEFT JOIN (SELECT furn_id,SUM(SUMA_PLATITA) AS SUMA_PLATITA FROM plati GROUP BY furn_id) p on f.furn_id=p.furn_id

 

Pentru Tabela generata 2 : Punctajul intre NIR-uri si platile catre furnizori

 nu am reusit inca nimic...

Daca se poate, va rog sa ma ajutati !

Va multumesc !

 10/30/2011 3:24:02 PM
User is offlinemmarius28
139 posts
5th


Re: JOIN 3 TABELE -Alta Problema
 (N/A) Modified By mmarius28  on 10/30/2011 4:24:18 PM)
 johny25 wrote

Multumesc mult !

Pentru Tabela generata 1 : Totalul de plata catre fiecare furnizor  sintaxa corecta este :

SELECT f.furn_id,f.denumire,f.adresa,f.judet,ISNULL(n.total_nir,0) AS total_nir,
ISNULL(p.SUMA_PLATITA,0) AS SUMA_PLATITA,ISNULL(n.total_nir,0)-ISNULL(p.SUMA_PLATITA,0) AS DIFERENTA
FROM furnizori f LEFT JOIN
(SELECT furn_id,sum(total_nir) AS total_nir from nir GROUP BY furn_id) n on f.furn_id=n.furn_id
 LEFT JOIN (SELECT furn_id,SUM(SUMA_PLATITA) AS SUMA_PLATITA FROM plati GROUP BY furn_id) p on f.furn_id=p.furn_id

 

Pentru Tabela generata 2 : Punctajul intre NIR-uri si platile catre furnizori

 nu am reusit inca nimic...

Daca se poate, va rog sa ma ajutati !

Va multumesc !

1. Am folosit functia NVL din Oracle. Nu stiu sintaxa de la SQLSERVER.

2. Nu inteleg. Nu este corecta a doua selectie?
 10/30/2011 5:01:43 PM
User is offlinejohny25
69 posts


Re: JOIN 3 TABELE -Alta Problema
 (N/A)

Se pare ca pina la urma lucreaza bine si al 2-lea SELECT. Probabil am gresit eu undeva...

Pentru Tabela generata 2 : Punctajul intre NIR-uri si platile catre furnizori sintaxa corecta este :

SELECT f.FURN_ID, f.DENUMIRE, f.ADRESA, f.JUDET, n.NR_NIR, n.TOTAL_NIR, ISNULL(p.SUMA_PLATITA,0) AS SUMA_PLATITA, ISNULL(n.TOTAL_NIR,0) - ISNULL(p1.SUMA_PLATITA, 0) AS DIFERENTA from
furnizori f
join nir n on f.FURN_ID = n.FURN_ID
left join plati p on n.FURN_ID = p.FURN_ID and n.NR_NIR = p.NR_NIR
left join (select FURN_ID, NR_NIR, sum(SUMA_PLATITA) as SUMA_PLATITA from plati group by FURN_ID, NR_NIR) p1 on n.FURN_ID = p1.FURN_ID and n.NR_NIR = p1.NR_NIR

Multumesc mult pentru ajutor !

Totusi mai am o intrebare :

Cum pot sa fac la SELECT 1,atunci cind execut comanda SQL, sa fie ignorate inregistrarile care au DIFERENTA=0 pentru a nu le aduce pe toate de pe server in tabela locala si apoi sa le sterg local ? In aceeasi comanda vreau sa adaug : WHERE DIFERENTA<>0 dar nu am reusit. Nu cunosc sintaxa.

Multumesc !

 10/30/2011 5:19:44 PM
User is offlinemmarius28
139 posts
5th


Re: JOIN 3 TABELE -Alta Problema
 (N/A)
 johny25 wrote

Se pare ca pina la urma lucreaza bine si al 2-lea SELECT. Probabil am gresit eu undeva...

Pentru Tabela generata 2 : Punctajul intre NIR-uri si platile catre furnizori sintaxa corecta este :

SELECT f.FURN_ID, f.DENUMIRE, f.ADRESA, f.JUDET, n.NR_NIR, n.TOTAL_NIR, ISNULL(p.SUMA_PLATITA,0) AS SUMA_PLATITA, ISNULL(n.TOTAL_NIR,0) - ISNULL(p1.SUMA_PLATITA, 0) AS DIFERENTA from
furnizori f
join nir n on f.FURN_ID = n.FURN_ID
left join plati p on n.FURN_ID = p.FURN_ID and n.NR_NIR = p.NR_NIR
left join (select FURN_ID, NR_NIR, sum(SUMA_PLATITA) as SUMA_PLATITA from plati group by FURN_ID, NR_NIR) p1 on n.FURN_ID = p1.FURN_ID and n.NR_NIR = p1.NR_NIR

Multumesc mult pentru ajutor !

Totusi mai am o intrebare :

Cum pot sa fac la SELECT 1,atunci cind execut comanda SQL, sa fie ignorate inregistrarile care au DIFERENTA=0 pentru a nu le aduce pe toate de pe server in tabela locala si apoi sa le sterg local ? In aceeasi comanda vreau sa adaug : WHERE DIFERENTA<>0 dar nu am reusit. Nu cunosc sintaxa.

Multumesc !

Pai DIFERENTA este ISNULL(n.TOTAL_NIR,0) - ISNULL(p1.SUMA_PLATITA, 0)

WHERE ISNULL(n.TOTAL_NIR,0) - ISNULL(p1.SUMA_PLATITA, 0) <> 0
 10/30/2011 7:13:10 PM
User is offlinejohny25
69 posts


Re: JOIN 3 TABELE -Alta Problema
 (N/A)

SELECT f.furn_id,f.denumire,f.adresa,f.judet,ISNULL(n.total_nir,0) AS total_nir,
ISNULL(p.SUMA_PLATITA,0) AS SUMA_PLATITA,ISNULL(n.total_nir,0)-ISNULL(p.SUMA_PLATITA,0) AS DIFERENTA
FROM furnizori f LEFT JOIN
(SELECT furn_id,sum(total_nir) AS total_nir from nir GROUP BY furn_id) n on f.furn_id=n.furn_id
 LEFT JOIN (SELECT furn_id,SUM(SUMA_PLATITA) AS SUMA_PLATITA FROM plati GROUP BY furn_id) p on f.furn_id=p.furn_id
 WHERE ISNULL(n.total_nir,0) - ISNULL(p.suma_platita, 0)<> 0

Merge Perfect !

Multumesc Foarte Mult !

  Visual FoxPro  Client/Server  JOIN 3 TABELE -...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement