Προς το περιεχόμενο

δύσκολη ερώτηση στην access


antio

Προτεινόμενες αναρτήσεις

Δημοσ.

Γειά σας.

Εχω ενα πίνακα που αποτελέιται απο δυο στήλες. Η μία ονοματεπώνυμο (1200 περίπου ονόματα) και η αλλη τα αντίστοιχα χρηματικά ποσά τους.

Σήμερα δημιούργησα αλλον ενα πινακα με τις ιδιες στήλες , όπου στην στήλη με τα ονοματεπώνυμο εχω καποια ονόματα κοινά με τον πρώτο πίνακα και κάποια καινούρια.

Υπάρχει τρόπος να "ενώσω" τους δυο πίνακες σε μια λιστα ετσι ώστε τα διπλα ονόματα να φαίνονται σαν ενα και ταυτόχρονα να αθροίζονται τα δύο ποσά και φυσικά να εμφανίζονται και τα νεα ονόματα στη λίστα?

 

Ευχαριστώ.

Δημοσ.

Δεν ξέρω κατα πόσο γίνεται αυτό που ζητάς... αλλά γιατί δημιούργησες έναν καινούργιο πίνακα με τις ίδιες εγγραφές + καποιες ακόμα αφού είχες ήδη έναν που θα μπορούσες να συμπληρώσεις;

Δημοσ.

Φιλε nikosdimos τον πίνακα δεν το δημιούργησα εγώ,αλλα μου τον εδωσε συνάδελφος σε μορφή excell.

 

Φίλε xamenos121 επειδή ειμαι καινουριος με την acceess , μηπως μπορεις να μου πεις πως να κανω το ερώτημα που θα επιλέγει τα κοινά ονόματα??

Αν γίνει αυτο τότε με ερ'ωτημα προσάρτησης θα μπορούσα να προσθέσω και τα υπόλοιπα διαφορετικά ονόματα???

Δημοσ.

Έστω ότι οι δύο πίνακές σου έχουν ονόματα Table1 & Table2 και τα πεδία που μας ενδιαφέρουν έχουν ονόματα Name, Amount και στους δύο πίνακες.

Χρησιμοποίησε το παρακάτω query:

>
SELECT TABLE1.NAME, 
iif(isnull(table1.AMOUNT), 0, table1.AMOUNT) + iif(isnull(table2.AMOUNT), 0, table2.AMOUNT) AS TotalAmount
FROM TABLE1 LEFT JOIN TABLE2 ON TABLE1.NAME = TABLE2.NAME;

Θα σου βγάλει όλα τα ονόματα από τον Table1 και το ποσό τους, ενώ σε όσα ονόματα έχουν εγγραφή και στον Table2 θα σου βγάλει το άθροισμά τους.

Δημοσ.

Μπορείς ίσως εύκολα να το κάνεις με ένα ερώτημα διπλοτύπων ή αλλιώτικα μπορείς να συμπεριλάβεις τον παρακάτω κώδικα σε ένα κουμπί εντολής που θα βρίσκεται σε μία φόρμα.

 

tblOld=το όνομα του παλιού πίνακα με πεδία [NameOld] και [AmmountOld]

tblNew=το όνομα του καινούριου πίνακα με το πεδίο [NameNew] που είναι το 'PrimaryKey' και το πεδίο [AmmountNew]

 

Dim dbs As Database

Dim rstOld As Recordset

Dim rstNew As Recordset

 

Set dbs=CurrentDb

Set rstOld=dbs.OpenRecordset("tblOld")

Set rstNew=dbs.OpenRecordset("tblNew")

 

If Not rstOld.Bof Then

rstOld.MoveFirst

End If

If Not rstOld.Eof Then

rstOld.MoveLast

End If

 

Dim lngOldRecords As Long

 

lngOldRecords=rstOld.RecordsCount

 

Dim intStart As Integer

 

If Not rstOld.Bof Then

rstOld.MoveFirst

End If

 

For intStart=1 To lngOldRecords

Dim strName As String

strName=rstOld!NameOld

 

Dim lngAmmount As Long

lngAmmount=rstOld!AmmountOld

 

If Not rstNew.Eof then

rstNew.MoveLast

End If

If Not rstNew.Bof then

rstNew.MoveFirst

End If

 

rstNew.Index="PrimaryKey"

rstNew.Seek "=", strName

If rstNew.NoMatch=True Then

rstNew.AddNew

rstNew!NameNew=strNameOld

rstNew!AmmountNew=lngAmmountOld

rstNew.Update

Else

rstNew.Edit

rstNew!AmmountNew=(rstNew!AmmountNew) + lngAmmountOld

rstNew.Update

End If

 

rstOld.MoveNext

 

rstOld.Close

rstNew.Close

 

Σ' αυτό το σημείο - εκτός απροόπτου και ορθογραφίας - στο νεότερο πίνακα θα υπάρχουν όλες οι εγγραφές όπως τις θέλεις.

Η φόρμα και ο παλιός πίνακας δεν χρειάζονται πια.

Αν πρόκειται για πολλά ονόματα αξίζει η προσπάθεια!

Δημοσ.

ok koykoy elysa to problima moy merikos me erotima diplotypon ,afoy prota perasa tis eggrafes moy se ena pinaka,stin synexeia frika ta dipla onomata me ta posa toys....

Tora to pos tha athroiso ta posa ... tha to skefto.... toylaxiston ta dipla onomata einai dipla-dipla.

Δημοσ.

Σε προβολή sql γράψε το ερώτητα και αποθήκευσέ το με όνομα AllNames.

 

SELECT Name

FROM tblNew

UNION SELECT Name

FROM tblOld;

 

κατόπιν γράψε το τελικό ερώτημα

 

SELECT AllNames.Name, tblOld.Ammount, tblNew.Ammount, [tblOld.Ammount]+[tblNew.Ammount] AS AmmountTotal

FROM (AllNames LEFT JOIN tblOld ON AllNames.Name = tblOld.Name) LEFT JOIN tblNew ON AllNames.Name = tblNew.Name;

Δημοσ.

Ας το κάνουμε πάλι!

 

Ερώτημα AllNames:

 

SELECT NameNew As Name, AmmountNew As Ammount

FROM tblNew

UNION SELECT NameOld As Name, AmmountOld As Ammount

FROM tblOld;

 

Τελικό ερώτημα:

 

SELECT AllNames.Name, Sum(AllNames.Ammount) AS ΆθροισμαΤουAmmount

FROM AllNames

GROUP BY AllNames.Name;

Δημοσ.

Ας το κάνουμε πάλι!

 

Ερώτημα AllNames:

 

SELECT NameNew As Name, AmmountNew As Ammount

FROM tblNew

UNION SELECT NameOld As Name, AmmountOld As Ammount

FROM tblOld;

 

Τελικό ερώτημα:

 

SELECT AllNames.Name, Sum(AllNames.Ammount) AS ΆθροισμαΤουAmmount

FROM AllNames

GROUP BY AllNames.Name;

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...