Συγχώνευση αποτελεσμάτων ερωτήματος. Συνδυασμός αποτελεσμάτων ερωτήματος Πώς να συνδυάσετε ερωτήματα σε ένα 1

Η γλώσσα ερωτημάτων είναι ένας από τους θεμελιώδεις μηχανισμούς του 1C 8.3 για προγραμματιστές. Με τη βοήθεια ερωτημάτων, μπορείτε να λάβετε γρήγορα οποιαδήποτε δεδομένα είναι αποθηκευμένα στη βάση δεδομένων. Η σύνταξή του μοιάζει πολύ με την SQL, αλλά υπάρχουν κάποιες διαφορές.

Τα κύρια πλεονεκτήματα της γλώσσας ερωτημάτων 1C 8.3 (8.2) έναντι της SQL:

  • αποαναφορά πεδίων αναφοράς (μετατροπή μιας ή περισσότερων κουκκίδων σε χαρακτηριστικά αντικειμένου).
  • η εργασία με τα αποτελέσματα είναι πολύ βολική.
  • τη δυνατότητα δημιουργίας εικονικών πινάκων.
  • το αίτημα μπορεί να γραφτεί τόσο στα αγγλικά όσο και στα ρωσικά.
  • τη δυνατότητα αποκλεισμού δεδομένων για την αποφυγή αδιεξόδων.

Μειονεκτήματα της γλώσσας ερωτήματος στο 1C:

  • Σε αντίθεση με την SQL, τα ερωτήματα 1C δεν σας επιτρέπουν να αλλάξετε δεδομένα.
  • έλλειψη αποθηκευμένων διαδικασιών.
  • η αδυναμία μετατροπής μιας συμβολοσειράς σε αριθμό.

Εξετάστε το μικρό μας σεμινάριο σχετικά με τις βασικές κατασκευές της γλώσσας ερωτημάτων 1C.

Λόγω του γεγονότος ότι τα αιτήματα στο 1C σας επιτρέπουν μόνο να λαμβάνετε δεδομένα, κάθε αίτημα πρέπει να ξεκινά με τη λέξη "ΕΠΙΛΟΓΗ". Μετά από αυτήν την εντολή, υποδεικνύονται τα πεδία από τα οποία θέλετε να λάβετε δεδομένα. Εάν καθορίσετε "*", τότε θα επιλεγούν όλα τα διαθέσιμα πεδία. Ο τόπος από τον οποίο θα επιλεγούν τα δεδομένα (έγγραφα, μητρώα, κατάλογοι κ.λπ.) αναγράφεται μετά τη λέξη «ΑΠΟ».

Στο παρακάτω παράδειγμα, τα ονόματα ολόκληρης της ονοματολογίας επιλέγονται από το βιβλίο αναφοράς "Ονοματολογία". Μετά τη λέξη "HOW", υποδεικνύονται ψευδώνυμα (ονόματα) για πίνακες και πεδία.

ΕΠΙΛΕΓΩ
Ονοματολογία.Όνομα AS NameNomenclature
ΑΠΟ
Κατάλογος Ονοματολογία AS Ονοματολογία

Δίπλα στην εντολή "ΕΠΙΛΟΓΗ", μπορείτε να καθορίσετε λέξεις-κλειδιά:

  • ΔΙΑΦΟΡΟΣ. Το ερώτημα θα επιλέξει μόνο σειρές που διαφέρουν σε τουλάχιστον ένα πεδίο (χωρίς διπλότυπα).
  • FIRST n, Οπου n– ο αριθμός των σειρών από την αρχή του αποτελέσματος που θα επιλεγεί. Τις περισσότερες φορές, αυτή η κατασκευή χρησιμοποιείται σε συνδυασμό με την ταξινόμηση (ORDER BY). Για παράδειγμα, όταν πρέπει να επιλέξετε έναν ορισμένο αριθμό από τα πιο πρόσφατα έγγραφα κατά ημερομηνία.
  • ΕΠΙΤΡΕΠΕΤΑΙ. Αυτός ο σχεδιασμός σάς επιτρέπει να επιλέξετε από τη βάση δεδομένων μόνο εκείνες τις εγγραφές που είναι διαθέσιμες στον τρέχοντα χρήστη. Εάν χρησιμοποιηθεί αυτή η λέξη-κλειδί, ο χρήστης θα λάβει ένα μήνυμα σφάλματος εάν προσπαθήσει να υποβάλει ερώτημα σε εγγραφές στις οποίες δεν έχει πρόσβαση.

Αυτές οι λέξεις-κλειδιά μπορούν να χρησιμοποιηθούν όλες μαζί ή χωριστά.

ΓΙΑ ΑΛΛΑΓΗ

Αυτή η ρήτρα κλειδώνει τα δεδομένα για την αποφυγή διενέξεων. Τα κλειδωμένα δεδομένα δεν θα διαβαστούν από άλλη σύνδεση μέχρι το τέλος της συναλλαγής. Σε αυτήν την ρήτρα, μπορείτε να καθορίσετε συγκεκριμένους πίνακες που θέλετε να κλειδώσετε. Διαφορετικά, όλα θα μπλοκαριστούν. Ο σχεδιασμός είναι σχετικός μόνο για τη λειτουργία αυτόματου μπλοκαρίσματος.

Τις περισσότερες φορές, η ρήτρα "ΓΙΑ ΑΛΛΑΓΗ" χρησιμοποιείται κατά τη λήψη υπολοίπων. Πράγματι, όταν πολλοί χρήστες εργάζονται στο πρόγραμμα ταυτόχρονα, ενώ ο ένας λαμβάνει τα υπόλοιπα, ο άλλος μπορεί να τα αλλάξει. Σε αυτήν την περίπτωση, η προκύπτουσα ισορροπία δεν θα είναι πλέον σωστή. Εάν αποκλείσετε τα δεδομένα με αυτήν την πρόταση, τότε μέχρι ο πρώτος υπάλληλος να λάβει το σωστό υπόλοιπο και να εκτελέσει όλους τους απαραίτητους χειρισμούς με αυτό, ο δεύτερος υπάλληλος θα πρέπει να περιμένει.

ΕΠΙΛΕΓΩ
Αμοιβαίοι διακανονισμοί Υπάλληλος,
Αμοιβαίοι διακανονισμοί Ποσό Αμοιβαίοι διακανονισμοί Υπόλοιπο
ΑΠΟ
Μητρώο Συσσώρευσης Αμοιβαίοι Διακανονισμοί ΜΕ Εργαζόμενους Υπόλοιπα ΩΣ Αμοιβαίοι Διακανονισμοί
ΓΙΑ ΑΛΛΑΓΗ

ΟΠΟΥ

Η κατασκευή είναι απαραίτητη για την επιβολή οποιασδήποτε επιλογής στα μη φορτωμένα δεδομένα. Σε ορισμένες περιπτώσεις λήψης δεδομένων από καταχωρητές, είναι πιο λογικό να προδιαγράφονται συνθήκες επιλογής στις παραμέτρους των εικονικών πινάκων. Όταν χρησιμοποιείτε το "WHERE", λαμβάνονται πρώτα όλες οι εγγραφές και μόνο τότε εφαρμόζεται η επιλογή, η οποία επιβραδύνει σημαντικά το ερώτημα.

Το παρακάτω είναι ένα παράδειγμα αιτήματος για να λάβετε άτομα επικοινωνίας με μια συγκεκριμένη θέση. Η παράμετρος επιλογής έχει την ακόλουθη μορφή: &ParameterName (το όνομα της παραμέτρου είναι αυθαίρετο).

ΕΠΙΛΟΓΗ (ΠΕΡΙΠΤΩΣΗ)

Η κατασκευή σάς επιτρέπει να καθορίσετε συνθήκες απευθείας στο σώμα αιτήματος.

Στο παρακάτω παράδειγμα, το "Πρόσθετο πεδίο" θα περιέχει κείμενο ανάλογα με το αν το έγγραφο έχει δημοσιευτεί ή όχι:

ΕΠΙΛΕΓΩ
ΕίσοδοςT&U.Link,
ΕΠΙΛΟΓΗ
ΟΤΑΝ
ΤΟΤΕ "Το έγγραφο δημοσιεύτηκε!"
ΑΛΛΑ "Το έγγραφο δεν δημοσιεύτηκε..."
ΤΕΛΟΣ ΩΣ Πρόσθετο Πεδίο
ΑΠΟ
Έγγραφο.Παραλαβή ΑγαθώνΥπηρεσίες AS ΑπόδειξηT&C

ΣΥΜΜΕΤΟΧΗ

Ενώνει δύο πίνακες με μια συγκεκριμένη συνθήκη σύνδεσης.

ΑΡΙΣΤΕΡΑ/ΔΕΞΙΑ ΣΥΝΔΕΣΗ

Η ουσία της ένωσης LEFT είναι ότι ο πρώτος καθορισμένος πίνακας λαμβάνεται πλήρως και ο δεύτερος συνδέεται σε αυτόν από την κατάσταση της σύνδεσης. Εάν δεν υπάρχουν εγγραφές που να αντιστοιχούν στον πρώτο πίνακα στον δεύτερο, τότε το NULL αντικαθίσταται ως τιμές τους. Με απλά λόγια, ο κύριος πίνακας είναι ο πρώτος καθορισμένος πίνακας και τα δεδομένα του δεύτερου πίνακα (αν υπάρχουν) έχουν ήδη αντικατασταθεί για τα δεδομένα του.

Για παράδειγμα, πρέπει να λάβετε είδη ειδών από τα έγγραφα «Παραλαβή αγαθών και υπηρεσιών» και τιμές από το μητρώο πληροφοριών «Τιμές προϊόντων». Σε αυτήν την περίπτωση, εάν δεν βρεθεί η τιμή οποιασδήποτε θέσης, αντικαταστήστε το NULL. Όλα τα στοιχεία από το έγγραφο θα επιλεγούν ανεξάρτητα από το αν έχουν τιμή ή όχι.

ΕΠΙΛΕΓΩ
Παραλαβή ονοματολογίας T&U,
Τιμές.Τιμή
ΑΠΟ
Έγγραφο.Παραλαβή ΑγαθώνΥπηρεσίες.Εμπορεύματα ΩΣ ΑπόδειξηT&C
ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ
ON Παραλαβή Ε&Α.Ονοματολογία = Τιμές.Ονοματολογία

Στο ΔΙΚΑΙΩΜΑ, όλα είναι ακριβώς το αντίθετο.

ΠΛΗΡΗΣ ΣΥΝΔΕΣΗ

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

Όταν χρησιμοποιείτε την πλήρη σύνδεση στο προηγούμενο παράδειγμα, θα επιλεγούν όλα τα είδη από το έγγραφο Παραλαβής Αγαθών και Υπηρεσιών και όλες οι πιο πρόσφατες τιμές από το μητρώο Τιμών Ειδών. Οι τιμές των εγγραφών που δεν βρέθηκαν, τόσο στον πρώτο όσο και στον δεύτερο πίνακα, θα είναι NULL.

ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ

Η διαφορά μεταξύ μιας σύνδεσης ΕΣΩΤΕΡΙΚΗΣ και μιας σύνδεσης FULL είναι ότι εάν μια εγγραφή δεν βρεθεί σε τουλάχιστον έναν από τους πίνακες, τότε το ερώτημα δεν θα την εμφανίσει καθόλου. Ως αποτέλεσμα, θα επιλεγούν μόνο εκείνα τα είδη από το έγγραφο Παραλαβής Αγαθών και Υπηρεσιών για τα οποία υπάρχουν εγγραφές στο μητρώο πληροφοριών Τιμών Ειδών, εάν στο προηγούμενο παράδειγμα αντικαταστήσουμε το FULL με το INTERNAL.

ΟΜΑΔΑ ΑΠΟ

Η ομαδοποίηση σε ερωτήματα 1C σάς επιτρέπει να συμπτύσσετε σειρές πίνακα (πεδία ομαδοποίησης) σύμφωνα με ένα συγκεκριμένο κοινό χαρακτηριστικό (πεδία ομαδοποίησης). Τα πεδία ομαδοποίησης μπορούν να εμφανιστούν μόνο με χρήση συναρτήσεων συγκεντρωτικών στοιχείων.

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

ΕΠΙΛΕΓΩ
,
ΜΕΓΙΣΤΗ (Τιμή.Τιμή) ΩΣ Τιμή
ΑΠΟ

ΟΜΑΔΑ ΑΠΟ
Τιμές.Ονοματολογία.ΤύποςΟνοματολογία

ΑΠΟΤΕΛΕΣΜΑΤΑ

Σε αντίθεση με την ομαδοποίηση, όταν χρησιμοποιούνται σύνολα, εμφανίζονται όλες οι εγγραφές και οι συνολικές σειρές έχουν ήδη προστεθεί σε αυτές. Η ομαδοποίηση εμφανίζει μόνο γενικευμένες εγγραφές.

Τα αποτελέσματα μπορούν να συνοψιστούν για ολόκληρο τον πίνακα (χρησιμοποιώντας τη λέξη-κλειδί "GENERAL"), για πολλά πεδία, για πεδία με ιεραρχική δομή (λέξεις-κλειδιά "HIERARCHY", "ONLY HIERARCHY"). Κατά τη σύνοψη, δεν είναι απαραίτητο να χρησιμοποιείτε συγκεντρωτικές συναρτήσεις.

Εξετάστε ένα παράδειγμα παρόμοιο με το παραπάνω παράδειγμα χρησιμοποιώντας ομαδοποίηση. Σε αυτήν την περίπτωση, το αποτέλεσμα του ερωτήματος θα επιστρέψει όχι μόνο ομαδοποιημένα πεδία, αλλά και λεπτομερείς εγγραφές.

ΕΠΙΛΕΓΩ
Τιμές.Ονοματολογία.Είδος Ονοματολογίας AS Τύπος Ονοματολογίας,
Τιμές.Τιμή ΩΣ Τιμή
ΑΠΟ
RegisterInformation.PricesNomenclature.SliceLast AS Τιμές
ΑΠΟΤΕΛΕΣΜΑΤΑ
MAXIMUM (Τιμή)
ΜΕ
Ονοματολογία τύπου

ΕΧΟΝΤΑΣ

Αυτός ο τελεστής είναι παρόμοιος με τον τελεστή WHERE, αλλά χρησιμοποιείται μόνο για συγκεντρωτικές συναρτήσεις. Πρέπει να ομαδοποιηθούν άλλα πεδία εκτός από αυτά που χρησιμοποιούνται από αυτόν τον τελεστή. Ο τελεστής "WHERE" δεν ισχύει για συγκεντρωτικές συναρτήσεις.

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

ΕΠΙΛΕΓΩ

ΜΕΓΙΣΤΗ (Τιμή.Τιμή) ΩΣ Τιμή
ΑΠΟ
RegisterInformation.PricesNomenclature.SliceLast AS Τιμές
ΟΜΑΔΑ ΑΠΟ
Τιμές.Ονοματολογία.ΤύποςΟνοματολογία
ΕΧΟΝΤΑΣ
MAX(Τιμές.Τιμή) > 1000

ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ

Ο τελεστής "ORDER BY" ταξινομεί το αποτέλεσμα του ερωτήματος. Για να διασφαλιστεί ότι οι εγγραφές εξάγονται με συνεπή σειρά, χρησιμοποιείται η AUTO-ORDER. Οι πρωτόγονοι τύποι ταξινομούνται σύμφωνα με τους συνήθεις κανόνες. Οι τύποι αναφοράς ταξινομούνται κατά GUID.

Ένα παράδειγμα ταξινόμησης λίστας υπαλλήλων με βάση το όνομα:

ΕΠΙΛΕΓΩ
Υπάλληλοι.Όνομα AS Όνομα
ΑΠΟ
Κατάλογος.Εργαζόμενοι AS Employees
ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ
Ονομα
ΑΥΤΟΜΑΤΗ ΠΑΡΑΓΓΕΛΙΑ

Άλλες κατασκευές της γλώσσας ερωτημάτων 1C

  • ΕΝΩΝΩ- τα αποτελέσματα δύο ερωτημάτων σε ένα.
  • ΕΝΩΣΤΕ ΟΛΟΙ– παρόμοιο με το JOIN, αλλά χωρίς ομαδοποίηση πανομοιότυπων σειρών.
  • ΑΔΕΙΟ ΤΡΑΠΕΖΙ- μερικές φορές χρησιμοποιείται κατά την ένωση ερωτημάτων για τον καθορισμό ενός κενού ένθετου πίνακα.
  • ΒΑΖΩ- δημιουργεί έναν προσωρινό πίνακα για τη βελτιστοποίηση σύνθετων ερωτημάτων 1C. Τέτοια αιτήματα ονομάζονται αιτήματα παρτίδας.

Χαρακτηριστικά γλώσσας ερωτήματος

  • ΥΠΟΤΡΟΠΗπερικόπτει μια συμβολοσειρά από μια καθορισμένη θέση κατά τον καθορισμένο αριθμό χαρακτήρων.
  • ΕΤΟΣ…ΔΕΥΤΕΡΟσας επιτρέπει να λάβετε την επιλεγμένη τιμή του αριθμητικού τύπου. Η παράμετρος εισαγωγής είναι μια ημερομηνία.
  • ΑΡΧΗ ΤΗΣ ΠΕΡΙΟΔΟΥ ΚΑΙ ΤΕΛΟΣ ΤΗΣ ΠΕΡΙΟΔΟΥχρησιμοποιούνται κατά την εργασία με ημερομηνίες. Ο τύπος περιόδου (ΗΜΕΡΑ, ΜΗΝΑΣ, ΕΤΟΣ, κ.λπ.) καθορίζεται ως πρόσθετη παράμετρος.
  • ΠΡΟΣΘΗΚΗσας επιτρέπει να προσθέσετε ή να αφαιρέσετε από την ημερομηνία την καθορισμένη ώρα ενός συγκεκριμένου τύπου (SECOND, MINUTE, DAY, κ.λπ.).
  • ΔΙΑΦΟΡΑ ΗΜΕΡΟΜΗΝΙΑΣκαθορίζει τη διαφορά μεταξύ δύο ημερομηνιών, προσδιορίζοντας τον τύπο της τιμής εξόδου (ΗΜΕΡΑ, ΕΤΟΣ, ΜΗΝΑΣ, κ.λπ.).
  • ISNULLαντικαθιστά την τιμή που λείπει με την καθορισμένη έκφραση.
  • ΠΑΡΟΥΣΙΑΣΗ και ΠΑΡΟΥΣΙΑΣΗ ΣΥΝΔΕΣΜΟΙλάβετε την παράσταση συμβολοσειράς του καθορισμένου πεδίου. Χρησιμοποιούνται για οποιεσδήποτε τιμές και μόνο για τιμές αναφοράς, αντίστοιχα.
  • TYPE, VALUE TYPEχρησιμοποιούνται για τον προσδιορισμό του τύπου της παραμέτρου εισόδου.
  • ΣΥΝΔΕΣΜΟΣείναι ένας λογικός τελεστής σύγκρισης για τον τύπο τιμής χαρακτηριστικού.
  • ΕΞΠΡΕΣχρησιμοποιείται για τη μετατροπή της τιμής στον επιθυμητό τύπο.
  • ΗΜΕΡΟΜΗΝΙΑ ΩΡΑπαίρνει μια τιμή τύπου "Ημερομηνία" από αριθμητικές τιμές (Έτος, Μήνας, Ημέρα, Ώρα, Λεπτό, Δευτερόλεπτο).
  • ΕΝΝΟΙΑσε ένα αίτημα 1C, χρησιμοποιείται για τον καθορισμό προκαθορισμένων τιμών - καταλόγων, απαριθμήσεις, σχέδια για τύπους χαρακτηριστικών. Παράδειγμα χρήσης: " Όπου LegalIndividual = Value(Enumeration.LegalIndividual.Individual)«.

Εργαλείο δημιουργίας ερωτημάτων

Για να δημιουργήσετε ερωτήματα με το 1C, υπάρχει ένας πολύ βολικός ενσωματωμένος μηχανισμός - ο σχεδιαστής ερωτημάτων. Περιέχει τις ακόλουθες κύριες καρτέλες:

  • "Πίνακες και πεδία" - περιέχει τα πεδία που θα επιλεγούν και τις πηγές τους.
  • "Σύνδεσμοι" - περιγράφει τις συνθήκες για την κατασκευή ΣΥΝΔΕΣΗ.
  • "Ομαδοποίηση" - περιέχει μια περιγραφή των κατασκευών ομαδοποιήσεων και συνοπτικά πεδίων από αυτές.
  • "Προϋποθέσεις" - είναι υπεύθυνος για την επιλογή των δεδομένων στο αίτημα.
  • "Advanced" - πρόσθετες παράμετροι ερωτήματος, όπως οι λέξεις-κλειδιά της εντολής "SELECT" κ.λπ.
  • "Συνδέσεις / Ψευδώνυμα" - υποδεικνύονται οι δυνατότητες σύνδεσης πινάκων και ορίζονται ψευδώνυμα (η κατασκευή "HOW").
  • "Παραγγελία" - είναι υπεύθυνη για την ταξινόμηση των αποτελεσμάτων των ερωτημάτων.
  • "Σύνολο" - παρόμοια με την καρτέλα "Ομαδοποίηση", αλλά χρησιμοποιείται για την κατασκευή "ΣΥΝΟΛΟ".

Το ίδιο το κείμενο του αιτήματος μπορεί να προβληθεί κάνοντας κλικ στο κουμπί "Αίτηση" στην κάτω αριστερή γωνία. Σε αυτή τη μορφή, μπορεί να διορθωθεί χειροκίνητα ή να αντιγραφεί.


Query Console

Για γρήγορη προβολή του αποτελέσματος ενός ερωτήματος στη λειτουργία "Επιχείρηση" ή για εντοπισμό σφαλμάτων σύνθετων ερωτημάτων, χρησιμοποιήστε το . Το κείμενο του ερωτήματος γράφεται σε αυτό, ορίζονται παράμετροι και εμφανίζεται το αποτέλεσμά του.

Μπορείτε να κάνετε λήψη της κονσόλας ερωτήματος στον δίσκο ITS ή από το .

Εάν εργάζεστε με ένα μόνο τραπέζι, τότε δεν χρειάζεται να χρησιμοποιήσετε σύνδεση. Είναι εντελώς διαφορετικό το θέμα όταν εργάζεστε με πολλούς πίνακες και, για παράδειγμα, πρέπει να λαμβάνετε δεδομένα τόσο για αγορές όσο και για πωλήσεις αγαθών.

Η πρόταση χρησιμοποιείται για συγχώνευση ΕΝΩΝΩ. Στην πραγματικότητα, τα αποτελέσματα των ερωτημάτων συνδυάζονται, δηλαδή, κάθε ερώτημα συλλέγει δεδομένα ανεξάρτητα το ένα από το άλλο και στη συνέχεια αυτά τα αποτελέσματα συνδυάζονται σε ένα. Και μόνο στο τελευταίο ερώτημα, εκτελούνται άλλες λειτουργίες, για παράδειγμα, παραγγελία και υπολογισμός συνόλων.

Όταν συνδυάζονται ερωτήματα, τα αποτελέσματα είναι "κάθετα κολλημένα", δηλαδή, οι σειρές αποτελεσμάτων του πρώτου ερωτήματος πηγαίνουν πρώτα και μετά το δεύτερο.

Ας προχωρήσουμε στην εξάσκηση:
Κωδικός 1C v 8.x ΕΠΙΛΟΓΗ
Ονοματολογία,
Ποσότητα,
Αθροισμα
ΑΠΟ
Έγγραφο.Απόδειξη.Εμπορεύματα

ΕΝΩΝΩ

ΕΠΙΛΕΓΩ
Ονοματολογία,
Ποσότητα,
Αθροισμα
ΑΠΟ
Έγγραφο.Απόδειξη.Εμπορεύματα

Το αποτέλεσμα αυτής της ερώτησης είναι το εξής:
Ονοματολογία Ποσότητα Ποσό
Χαρτί Α4 25 14 500
Αυτοκόλλητα 500 l 8 4 880
Διαφανές αρχείο 5 4 100
Σετ γραφείου 8 8 840

Ως αποτέλεσμα, θα λάβουμε δύο πίνακες που θα συνδέονται μεταξύ τους. Είναι δύσκολο να δούμε πού τελειώνει το Εισερχόμενο έγγραφο και πού ξεκινά το εξερχόμενο έγγραφο. Θα κάνουμε όμως κάτι για να το καταλάβουμε:
Κωδικός 1C v 8.χ
ΕΠΙΛΕΓΩ
Ονοματολογία,
Ποσότητα AS QtyΕισερχόμενη,
Ποσό AS SumIncome,
0 ΠΩΣ Ποσότητα Κατανάλωση,
0 ΩΣ SUMEέξοδα
ΑΠΟ
Έγγραφο.Απόδειξη.Εμπορεύματα

ΕΝΩΝΩ

ΕΠΙΛΕΓΩ
Ονοματολογία,
0 AS Number Εισερχόμενο,
0 AS SumIncome,
Ποσότητα AS Ποσότητα Έξοδα,
Ποσό AS SumExpense
ΑΠΟ
Έγγραφο.Αναλώσιμα.Εμπορεύματα

Όπως μπορείτε να δείτε από το κείμενο του αιτήματος, έχουμε ορίσει διαφορετικά ψευδώνυμα για κάθε έγγραφο για ποσότητα και ποσότητα. Επίσης, στη θέση εκείνων των πεδίων όπου θα λάβουμε τις τιμές της ποσότητας και της ποσότητας, θα βάλουμε μηδενικά. Αυτό είναι απαραίτητο ώστε οι κενές τιμές του ποσού και του ποσού να αντικατασταθούν με μηδενικά.

Χαρτί Α4 25 14 500
Αυτοκόλλητα 500 l 8 4 880
Διαφανές αρχείο 5 4 100
Σετ γραφείου 8 8 840
Σετ γραφείου 1 1 105
Διαφανές αρχείο 1820
Αυτοκόλλητα 500 l 1 610

Τώρα πρέπει να αφαιρέσουμε τα διπλά στοιχεία από το αποτέλεσμα του ερωτήματος. Έχουμε δύο ερωτήματα και αν συμπτύξουμε το καθένα ξεχωριστά για να εξαιρέσουμε διπλότυπα στοιχεία, τότε δεν θα πετύχουμε. Επομένως, θα φέρουμε το ερώτημα στην παρακάτω φόρμα:
Κωδικός 1C v 8.χ
ΕΠΙΛΕΓΩ
Ονοματολογία,
SUM(Αριθμός Εισοδήματος) AS Αριθμός Εισοδήματος,
SUM(SumIncome) AS SumIncome,
ΠΟΣΟ (αριθμός δαπανών) ΩΣ ποσό δαπανών,
SUM(SumExpense) AS SumExpense
ΑΠΟ

(ΕΠΙΛΕΓΩ
Ονοματολογία,
Ποσότητα AS QtyΕισερχόμενη,
Ποσό AS SumIncome,
0 ΠΩΣ Ποσότητα Κατανάλωση,
0 ΩΣ SUMEέξοδα
ΑΠΟ
Έγγραφο.Απόδειξη.Εμπορεύματα

ΕΝΩΝΩ

ΕΠΙΛΕΓΩ
Ονοματολογία,
0 AS Number Εισερχόμενο,
0 AS SumIncome,
Ποσότητα AS Ποσότητα Έξοδα,
Ποσό AS SumExpense
ΑΠΟ
Document.Consumable.Products) AS NestedRequest

ΟΜΑΔΑ ΚΑΤΑ Ονοματολογία

Έτσι, βλέπουμε ότι ολόκληρο το ερώτημά μας περικλείεται σε αγκύλες και ονομάζεται NestedQuery. Αυτό γίνεται για να μπορούμε να ομαδοποιήσουμε εγγραφές και από τα δύο υποερωτήματα και να εξαλείψουμε τα διπλά στοιχεία. Μια τέτοια κατασκευή ονομάζεται ένθετο ερώτημα. Το αποτέλεσμα αυτής της ερώτησης είναι το εξής:
Ονοματολογία Ποσότητα Εισερχόμενη Άθροισμα Εισερχόμενη Ποσ.Εξοδικά SumExpense
Χαρτί Α4 25 14 500
Αυτοκόλλητα 500 l 8 4 880 1 610
Σετ γραφείου 5 4 100 1 1 105
Διαφανές αρχείο 8 8 840 1 820

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

Αν θέλουμε να αφήσουμε μόνο μοναδικές τιμές των εγγραφών στο ερώτημα, χωρίς να χρησιμοποιήσουμε ομαδοποίηση. Είναι απαραίτητο να γράψετε την πρόταση JOIN χωρίς τη λέξη-κλειδί ALL.

Πληροφορίες που λαμβάνονται από τον ιστότοπο

; Υποερωτήματα (σε ανάπτυξη).

Παραλαβή αγαθών και υπηρεσιώνΚαι Επιστροφή αγαθών στον προμηθευτήγια την καθορισμένη περίοδο.

Νέες καρτέλες: Σωματεία/Ψευδώνυμα.

Θεωρητικό μέρος του μαθήματος 4

Το Query Builder 1c σάς επιτρέπει να δημιουργείτε συναθροίσεις ερωτημάτων. Με τη βοήθειά τους, μπορείτε να εξάγετε διαδοχικά δεδομένα που λαμβάνονται από διάφορα ερωτήματα στο αποτέλεσμα χωρίς να χρησιμοποιείτε σχέσεις. Η μόνη προϋπόθεση για τη συμμετοχή είναι το ίδιο σύνολο πεδίων σε κάθε ερώτημα.

Στον κατασκευαστή, μεταβείτε στην καρτέλα Σωματεία/Ψευδώνυμα. Προορίζεται για τη δημιουργία συνδέσεων ερωτημάτων και για τον ορισμό ψευδωνύμων για πεδία ερωτήματος. Απαιτούνται ψευδώνυμα πεδίων εάν δεν αισθάνεστε άνετα με τα τυπικά ονόματα πεδίων βάσης δεδομένων. Εάν ένα πεδίο ερωτήματος αποτελείται μόνο από ένα πεδίο πίνακα βάσης δεδομένων, τότε δεν απαιτείται ψευδώνυμο για αυτό. Εάν χρησιμοποιήσατε συναρτήσεις γλώσσας ερωτήματος κατά τη δημιουργία ενός πεδίου, τότε απαιτείται ψευδώνυμο για ένα τέτοιο πεδίο. Για τέτοια πεδία, το εργαλείο δημιουργίας ερωτημάτων δημιουργεί τυπικά ψευδώνυμα Πεδίο1…ΠεδίοΝ, αυτά τα ψευδώνυμα μπορούν να αντικατασταθούν με ό,τι σας βολεύει.

Εξετάστε τις ενότητες της καρτέλας Σωματεία / Ψευδώνυμα:

  • Αιτήσεων(κόκκινο πλαίσιο). Αυτή η ενότητα περιέχει έναν πίνακα που εμφανίζει όλα τα συνδυασμένα ερωτήματα, χρησιμοποιώντας το μενού που βρίσκεται πάνω από αυτήν την ενότητα, μπορείτε να προσθέσετε νέα, να αντιγράψετε υπάρχοντα και να διαγράψετε επιλεγμένα, καθώς και να τα αλλάξετε. Όταν προσθέτετε ή αντιγράφετε ένα ερώτημα, ο σχεδιαστής μεταβαίνει στην καρτέλα Πίνακες και πεδία, όπου μπορείτε να ορίσετε τους πίνακες βάσης δεδομένων και τα απαιτούμενα πεδία για το νέο ερώτημα. Μπορείτε να κάνετε εναλλαγή μεταξύ αιτημάτων χρησιμοποιώντας τις καρτέλες που θα εμφανίζονται στη δεξιά πλευρά του κατασκευαστή καθώς προστίθενται νέα αιτήματα 1.

  • Τραπέζι Αιτήσεωνδύο στήλες:
    • Ονομα. Ρυθμίστε αυτόματα στη μορφή Αίτημα 1 … Αίτημα N;
    • Χωρίς διπλότυπα. Ορίστε εάν είναι απαραίτητο να εξαιρεθούν διπλότυπες σειρές κατά τη σύνδεση με ένα προηγούμενο ερώτημα. Αξίζει να σημειωθεί ότι αυτή η σημαία θα επηρεάσει μόνο την ένωση του αιτήματος στο οποίο έχει οριστεί με το προηγούμενο αίτημα.

  • Ψευδώνυμα(μπλε πλαίσιο). Σε αυτήν την ενότητα, μπορείτε να ορίσετε ψευδώνυμα για πεδία ερωτήματος, καθώς και πεδία αντιστοίχισης για συνδυασμένα ερωτήματα, έτσι ώστε στο αποτέλεσμα του ερωτήματος να βρίσκονται στην ίδια στήλη και να εμφανίζονται κάτω από το ίδιο ψευδώνυμο. Εάν τα πεδία στα συνδυασμένα ερωτήματα έχουν το ίδιο όνομα, τότε η μεταξύ τους αντιστοιχία προσαρμόζεται αυτόματα. Για να ρυθμίσετε την αντιστοιχία των πεδίων, πρέπει να βρείτε τη γραμμή με το απαιτούμενο ψευδώνυμο στον πίνακα, να βρείτε το απαιτούμενο ερώτημα στις στήλες και να επιλέξετε το πεδίο στην αναπτυσσόμενη λίστα.

Πρακτικό μέρος του μαθήματος 4

Ας αναλύσουμε τη λύση του προβλήματος που δόθηκε στην αρχή του μαθήματος. Να σας υπενθυμίσω τις προϋποθέσεις:

Εργασία: επιλέξτε όλα τα δημοσιευμένα έγγραφα κατά ερώτημα Παραλαβή αγαθών και υπηρεσιώνΚαι Επιστροφή αγαθών στον προμηθευτήγια την καθορισμένη περίοδο.

  1. Ας δημιουργήσουμε ένα νέο αίτημα.
  2. Ας ξεκινήσουμε το πρόγραμμα δημιουργίας ερωτημάτων.
  3. Ας διαλέξουμε ένα τραπέζι Υπηρεσίες εισερχόμενων αγαθώναπό ένα υποκατάστημα Τεκμηρίωση;
  4. Από το τραπέζι Υπηρεσίες εισερχόμενων αγαθώνεπιλέξτε ένα πεδίο Σύνδεσμος;
  5. Ας πάμε στην καρτέλα Συνθήκες;
  6. Στο κεφάλαιο χωράφια, ανοίξτε το υποκατάστημα Υπηρεσίες εισερχόμενων αγαθώνχρησιμοποιώντας το κουμπί "+"?
  7. Ας βρούμε στηρίγματα ημερομηνίακαι σύρετέ το στην ενότητα συνθηκών, επιλέξτε τον τελεστή σύγκρισης Μεταξύκαι καθορίστε τις παραμέτρους για την αρχή και το τέλος της περιόδου, για παράδειγμα Αρχή περιόδουΚαι EndPeriod;
  8. Ας πάμε στην καρτέλα Σωματεία / Ψευδώνυμα.
  9. Προσθήκη νέου αιτήματος, επισήμανση Χωρίς διπλότυπαΔεν υπάρχει λόγος να το θίξουμε, καθώς χρησιμοποιούμε διαφορετικούς τύπους εγγράφων.

  10. Το Query Builder 1 θα μεταβεί αυτόματα στην καρτέλα Πίνακες και πεδία. Στο δεξί μέρος του παραθύρου, θα δείτε ότι το δεύτερο αίτημα συμμετοχής είναι ενεργό.


  11. Ας επαναλάβουμε τα βήματα 1 - 7, για τον πίνακα Επιστροφή αγαθών στον προμηθευτή;
  12. Ας επιστρέψουμε στην καρτέλα. Σωματεία / Ψευδώνυμα. Στον πίνακα ψευδωνύμων, μπορείτε να δείτε ότι τα πεδία ΣύνδεσμοςΚαι οι δύο πίνακες βρίσκονται στην ίδια γραμμή, πράγμα που σημαίνει ότι οι σύνδεσμοι και στα δύο έγγραφα θα βρίσκονται στην ίδια στήλη ως αποτέλεσμα του ερωτήματος.
  13. Αλλάξτε το όνομα της στήλης από Σύνδεσμοςεπί Εγγραφο(ορίστε το ψευδώνυμο πεδίου). Για να το κάνετε αυτό, κάντε διπλό κλικ στο όνομα του πεδίου με το αριστερό κουμπί του ποντικιού. Στη συνέχεια, μπορείτε να ορίσετε το όνομά σας, εισάγετε εκεί Εγγραφο;

  14. Το αίτημα είναι έτοιμο, κάντε κλικ στο κουμπί "OK" στο κάτω μέρος του παραθύρου του σχεδιαστή.

Ως αποτέλεσμα, θα λάβουμε ένα αίτημα με το ακόλουθο κείμενο.

Υπάρχουν περιπτώσεις όπου είναι απαραίτητο να συνδυαστούν πολλά ερωτήματα σε ένα ερώτημα και οι ενώσεις πινάκων δεν μπορούν να βοηθήσουν με κανέναν τρόπο. Είναι πιο εύκολο να το δείξετε με ένα παράδειγμα.

Ας υποθέσουμε ότι στο σύστημά μας τα γεγονότα αγοράς και πώλησης αγαθών καταχωρούνται από παραστατικά Έσοδα και Δαπάνες, αντίστοιχα. Ένας αντισυμβαλλόμενος μπορεί να είναι και αγοραστής και προμηθευτής. Ο συμψηφισμός του χρέους μπορεί να γίνει με παράδοση αγαθών:

Για να υπολογίσετε το συνολικό χρέος ενός αντισυμβαλλομένου, είναι απαραίτητο να αθροίσετε το άθροισμα όλων των εξόδων για αυτόν τον αντισυμβαλλόμενο και να αφαιρέσετε το άθροισμα όλων των εισπράξεων από τον ίδιο αντισυμβαλλόμενο, ο ευκολότερος τρόπος για να το κάνετε αυτό είναι να χρησιμοποιήσετε τον τελεστή UNITE ALL:

Αίτημα.Κείμενο =
"
//υπολογίστε πόσα στείλαμε στους αντισυμβαλλομένους
|ΕΠΙΛΕΞΤΕ
| Κατανάλωση Αντισυμβαλλόμενος,
| ΑΠΟ
| Έγγραφο.Έξοδα ΩΣ Έξοδα
|ΟΜΑΔΑ ΑΠΟ
| Κατανάλωση Αντισυμβαλλόμενος
|ΕΓΓΡΑΦΕΙΤΕ ΟΛΟΙ
//υπολογίστε το ποσό των αντισυμβαλλομένων
//παρέδωσε αγαθά σε εμάς
|ΕΠΙΛΕΞΤΕ
| Άφιξη. Ανάδοχος,
//πάρτε το ποσό με αρνητικό πρόσημο,
//ότι όταν συνδυαζόταν, αφαιρέθηκε από το ποσό της δαπάνης
| SUM(-Incoming.Amount)
| ΑΠΟ
| Έγγραφο.Εισερχόμενο AS Εισερχόμενο
|ΟΜΑΔΑ ΑΠΟ
| Άφιξη.Ανάδοχος";

Στο πρώτο αίτημα, υπολογίζουμε το ποσό των δαπανών για κάθε αντισυμβαλλόμενο, στο δεύτερο - το ποσό για το οποίο καθένας από τους αντισυμβαλλόμενους παρέδωσε τα αγαθά σε εμάς. Το ποσό στο δεύτερο ερώτημα λαμβάνεται με το σύμβολο μείον, έτσι ώστε όταν ο πίνακας που προκύπτει συμπτύσσεται, θα αφαιρείται από το ποσό της αποστολής σε αυτόν τον αντισυμβαλλόμενο. Ως αποτέλεσμα, παίρνουμε έναν πίνακα της φόρμας:

Δεν είναι ακριβώς αυτό που θέλαμε, αλλά είναι κοντά. Για να επιτευχθεί το επιθυμητό αποτέλεσμα, μένει η ομαδοποίηση ανά αντισυμβαλλόμενο. Για να γίνει αυτό, το ερώτημα πρέπει να τοποθετηθεί σε έναν προσωρινό πίνακα (η εργασία με τους προσωρινούς πίνακες συζητείται στο κλειστό μέρος του μαθήματος ) και επιλέξτε και ομαδοποιήστε πεδία από αυτό:

Request = Νέο αίτημα;
Αίτημα.Κείμενο =
"ΕΠΙΛΕΓΩ
| Κατανάλωση Αντισυμβαλλόμενος,
| AMOUNT(Expense.Amount) ΩΣ Χρέος
|PUT TU_IncomeExpense
| ΑΠΟ
| Έγγραφο.Έξοδα ΩΣ Έξοδα
|ΟΜΑΔΑ ΑΠΟ
| Κατανάλωση Αντισυμβαλλόμενος
|ΕΓΓΡΑΦΕΙΤΕ ΟΛΟΙ
|ΕΠΙΛΕΞΤΕ
| Άφιξη. Ανάδοχος,
| SUM(-Incoming.Amount)
| ΑΠΟ
| Έγγραφο.Εισερχόμενο AS Εισερχόμενο
|ΟΜΑΔΑ ΑΠΟ
| Άφιξη.Ανάδοχος
|;
|////////////////////////////////////////////////////////////////////////////////
|ΕΠΙΛΕΞΤΕ
| Τρίτη_Εισερχόμενα Έξοδα. Αντισυμβαλλόμενος,
| SUM(BT_IncomeExpense.Debt) AS Debt
| ΑΠΟ
| Τρίτη_Εισόδημα Έξοδα ΩΣ Τρίτη_Εισόδημα Έξοδα
|ΟΜΑΔΑ ΑΠΟ
| Τρίτη_Εισόδια Έξοδα. Αντισυμβαλλόμενος";

Απαιτήσεις για τη συγχώνευση ερωτημάτων

Όταν συνδυάζονται δύο ερωτήματα, ο αριθμός των πεδίων σε αυτά πρέπει να είναι ο ίδιος, εάν κάποιο από τα ερωτήματα δεν έχει πεδία, τότε πρέπει να προστεθούν ως σταθερές. Ας δούμε το παραπάνω παράδειγμα, ας πούμε ότι το παραστατικό εξόδων έχει και πεδίο έκπτωσης, το οποίο μειώνει την οφειλή του αντισυμβαλλομένου, αλλά δεν υπάρχουν εκπτώσεις στο παραστατικό εισοδήματος. Πώς να είσαι σε αυτή την περίπτωση; Ετσι:

Request = Νέο αίτημα;
Αίτημα.Κείμενο =
"ΕΠΙΛΕΓΩ
| Κατανάλωση Αντισυμβαλλόμενος,

| ΑΠΟ
| Έγγραφο.Έξοδα ΩΣ Έξοδα
|ΟΜΑΔΑ ΑΠΟ
| Κατανάλωση Αντισυμβαλλόμενος
|ΕΓΓΡΑΦΕΙΤΕ ΟΛΟΙ
|ΕΠΙΛΕΞΤΕ
| Άφιξη. Ανάδοχος,
| SUM(-Εισερχόμενο.Ποσό),
// προσθέστε μια έκπτωση μηδενικού πεδίου
| 0
| ΑΠΟ
| Έγγραφο.Εισερχόμενο AS Εισερχόμενο
|ΟΜΑΔΑ ΑΠΟ
| Άφιξη.Ανάδοχος";

Μένει να αφαιρέσουμε την έκπτωση και την ομάδα.

Η σειρά είναι επίσης σημαντική. Τα πεδία θα συνδυαστούν ακριβώς με τη σειρά με την οποία καθορίζονται στις ενότητες SELECT και των δύο ερωτημάτων. Όσον αφορά το προηγούμενο παράδειγμα, ας ανταλλάξουμε τα πεδία έκπτωση και ποσό στην επιλογή των αποδείξεων:

Request = Νέο αίτημα;
Αίτημα.Κείμενο =
"ΕΠΙΛΕΓΩ
| Κατανάλωση Αντισυμβαλλόμενος,
| AMOUNT(Expense.Amount) ΩΣ Χρέος,
| ΠΟΣΟ (Έξοδα. Έκπτωση) ΩΣ Έκπτωση
| ΑΠΟ
| Έγγραφο.Έξοδα ΩΣ Έξοδα
|ΟΜΑΔΑ ΑΠΟ
| Κατανάλωση Αντισυμβαλλόμενος
|ΕΓΓΡΑΦΕΙΤΕ ΟΛΟΙ
|ΕΠΙΛΕΞΤΕ
| Άφιξη. Ανάδοχος,
//ανταλαγή
| 0,
| SUM(-Incoming.Amount)
| ΑΠΟ
| Έγγραφο.Εισερχόμενο AS Εισερχόμενο
|ΟΜΑΔΑ ΑΠΟ
| Άφιξη.Ανάδοχος";

Καλημέρα, αγαπητοί αναγνώστες του ιστότοπου του ιστολογίου. Σήμερα θα συζητήσουμε λεπτομερώς συνδυάζοντας αιτήματα σε 1C. Μπορείτε επίσης να κάνετε λήψη για μια τυπική διαμόρφωση Business Management για το Καζακστάν, έκδοση 1.0.

Εάν εργάζεστε με ένα μόνο τραπέζι, τότε δεν χρειάζεται να χρησιμοποιήσετε σύνδεση. Είναι εντελώς διαφορετικό το θέμα όταν εργάζεστε με πολλούς πίνακες και, για παράδειγμα, πρέπει να λαμβάνετε δεδομένα για αγορές και πωλήσεις αγαθών.

Η πρόταση χρησιμοποιείται για συγχώνευση ΕΝΩΣΗ / ΕΝΩΣΗ. Τι πραγματικά συμβαίνει συνδυάζοντας αποτελέσματα ερωτημάτων, δηλαδή, κάθε ερώτημα συλλέγει δεδομένα ανεξάρτητα το ένα από το άλλο και στη συνέχεια αυτά τα αποτελέσματα συνδυάζονται σε ένα. Και μόνο στο τελευταίο ερώτημα, εκτελούνται άλλες λειτουργίες, για παράδειγμα, παραγγελία και υπολογισμός συνόλων.

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

Ας προχωρήσουμε στην εξάσκηση:

SELECT Ονοματολογία, Ποσότητα, Ποσό ΕΝΩΝΩΕΠΙΛΕΞΤΕ Ονοματολογία, Ποσότητα, Ποσό ΑΠΟ Έγγραφο.Αναλώσιμα.Εμπορεύματα

Το αποτέλεσμα αυτής της ερώτησης είναι το εξής:

Ως αποτέλεσμα, θα λάβουμε δύο πίνακες που θα συνδέονται μεταξύ τους. Είναι δύσκολο να δούμε πού τελειώνει το Εισερχόμενο έγγραφο και πού ξεκινά το εξερχόμενο έγγραφο. Αλλά θα κάνουμε κάτι για να το καταλάβουμε:

Ονοματολογία SELECT, Ποσότητα AS NumberPrikhod, Άθροισμα AS SumPrikhod, 0 AS QtyExpense, 0 AS SumExpenseΑΠΟ Έγγραφο.Εισερχόμενα.Εμπορεύματα ΕΝΩΝΩ NumberPrikhod, 0 AS SumPrikhod, Αριθμός AS QtyExpense, Άθροισμα AS SumExpenseΑΠΟ Έγγραφο.Αναλώσιμα.Εμπορεύματα

Όπως μπορείτε να δείτε από το κείμενο του αιτήματος, έχουμε ορίσει διαφορετικά ψευδώνυμα για κάθε έγγραφο για ποσότητα και ποσότητα. Επίσης, στη θέση εκείνων των πεδίων όπου θα λάβουμε τις τιμές της ποσότητας και της ποσότητας, θα βάλουμε μηδενικά. Αυτό είναι απαραίτητο ώστε οι κενές τιμές του ποσού και του ποσού να αντικατασταθούν με μηδενικά.

Ονοματολογία NumberPrikhod SumPrikhod QtyExpense SumExpense
Χαρτί Α4 25 14 500
Αυτοκόλλητα 500l 8 4 880
Το αρχείο είναι διαφανές 5 4 100
Σετ γραφείου 8 8 840
Σετ γραφείου 1 1 105
Το αρχείο είναι διαφανές 1 820
Αυτοκόλλητα 500l 1 610

Τώρα πρέπει να αφαιρέσουμε τα διπλά στοιχεία από το αποτέλεσμα του ερωτήματος. Έχουμε δύο ερωτήματα και αν συμπτύξουμε το καθένα ξεχωριστά για να εξαιρέσουμε διπλότυπα στοιχεία, τότε δεν θα πετύχουμε. Επομένως, θα φέρουμε το ερώτημα στην παρακάτω φόρμα:

ΕΠΙΛΕΓΩ
Ονοματολογία,
SUM(Αριθμός Εισοδήματος) AS Αριθμός Εισοδήματος,
SUM(SumIncome) AS SumIncome,
ΠΟΣΟ (αριθμός δαπανών) ΩΣ ποσό δαπανών,
SUM(SumExpense) AS SumExpense
ΑΠΟ
(
Ονοματολογία SELECT, Ποσότητα AS NumberPrikhod, Άθροισμα AS SumPrikhod, 0 AS QtyExpense, 0 AS SumExpenseΑΠΟ Έγγραφο.Εισερχόμενα.Εμπορεύματα ΕΝΩΝΩΟνοματολογία SELECT, 0 AS NumberPrikhod, 0 AS SumPrikhod, Αριθμός AS QtyExpense, Άθροισμα AS SumExpenseΑΠΟ Έγγραφο.Αναλώσιμα.Εμπορεύματα ) AS NestedQuery
ΟΜΑΔΑ ΑΝΑ Ονοματολογία

Έτσι, βλέπουμε ότι ολόκληρο το ερώτημά μας περικλείεται σε αγκύλες και ονομάζεται NestedQuery. Αυτό γίνεται για να μπορούμε να ομαδοποιήσουμε εγγραφές και από τα δύο υποερωτήματα και να εξαλείψουμε τα διπλά στοιχεία. Μια τέτοια κατασκευή ονομάζεται ένθετο ερώτημα. Το αποτέλεσμα αυτής της ερώτησης είναι το εξής:

Ονοματολογία NumberPrikhod SumPrikhod QtyExpense SumExpense
Χαρτί Α4 25 14 500
Αυτοκόλλητα 500l 8 4 880 1 610
Σετ γραφείου 5 4 100 1 1 105
Το αρχείο είναι διαφανές 8 8 840 1 820

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