SQL 2008 Σύνολα τρέξιμο και Null Εγγραφές

ψήφοι
0

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

  • ERP μας δημιουργεί ένα αρχείο ισορροπία μόνο σε περιόδους όπου υπάρχει δραστηριότητα που σχετίζεται με το λογαριασμό. Οι εφαρμογές ERP και εκθέσεις συνοψίζουν τις τιμές ανά περίοδο, αλλά κανένα αρχείο προστίθεται στη βάση δεδομένων, έτσι προσαρμοσμένες διαδικασίες που χρειάζονται μια ισορροπία με την περίοδο απαιτούν ένα ερώτημα / στόχο να υπολογίσει αυτές τις πληροφορίες. λύση μου για αυτό ήταν να χρησιμοποιήσετε μια καθολική μεταβλητή για να δημιουργήσει σκόπιμα αντίγραφα από τον πίνακα λογαριασμού και το τραπέζι περίοδο psudo δημιούργησα, δείτε παρακάτω.
  • πίνακα Περίοδος Λογαριασμός μας δόση δεν περιέχουν ένα δείκτη περίοδο (Υποθέτω ότι θα πρέπει να είναι η ταυτότητα Row όμως κάποια στιγμή προστέθηκε εσφαλμένα μια δημοσιονομική περίοδο και ο δείκτης πετάχτηκε εκτός λειτουργίας. Έχω ενημερωθεί από τον πάροχο ERP δεν την ενημέρωση αυτή χωρίς πλήρη νέας υλοποίησης). Δημιούργησα ένα τραπέζι λύση για αυτό.

Γι 'αυτό και έχουν πολλά ερωτήματα που λειτουργούν γύρω από αυτά τα ζητήματα, αλλά τρέχουν slowley με μόνο μια χούφτα των λογαριασμών έτσι ένα πλήρες τραπέζι psudo για τα υπόλοιπα των λογαριασμών δεν έχει πρακτικό με τις μεθόδους μου τουλάχιστον. Έχω συμπεριλάβει ένα παράδειγμα παρακάτω για τον υπολογισμό της ισορροπίας ανά περίοδο για λογαριασμούς που δεν συνοψίζονται στα κέρδη εις νέον anually (περιουσιακά στοιχεία, libalities, ίδια κεφάλαια)

SELECT ID AS ACCOUNT_ID, ind.Month_Index, ind.Period,

       (
        SELECT ISNULL(SUM(CASE WHEN A3.TYPE IN ('e','r') THEN NULL
                               WHEN A3.TYPE = 'a' THEN ISNULL(AB3.DEBIT_AMOUNT,0) - ISNULL(AB3.CREDIT_AMOUNT,0) 
                               ELSE ISNULL(AB3.CREDIT_AMOUNT,0) - ISNULL(AB3.DEBIT_AMOUNT,0) END),0)

        FROM ACCOUNT_BALANCE AS AB3
        LEFT OUTER JOIN ACCOUNT AS A3
        ON AB3.ACCOUNT_ID = A3.ID
        LEFT OUTER JOIN (
                         SELECT YEAR, Month_Num, Month_Index, Period
                         FROM UFC_Calander 
                         GROUP BY YEAR, Month_Num, Month_Index, Period
                        ) AS ind2
        ON AB3.ACCT_YEAR = ind2.YEAR AND AB3.ACCT_PERIOD = ind2.Month_Num
        WHERE A.ID = AB3.ACCOUNT_ID AND A3.CURRENCY_ID = '(USA) $' AND ind2.Month_Index <= ind.Month_Index
       ) AS BALANCE_AQL

FROM ACCOUNT AS A
LEFT OUTER JOIN ACCOUNT_PERIOD AS per
ON 'UCC' = per.SITE_ID
LEFT OUTER JOIN ACCOUNT_BALANCE AS AB
ON A.ID = AB.ACCOUNT_ID AND per.ACCT_YEAR = AB.ACCT_YEAR AND per.ACCT_PERIOD = AB.ACCT_PERIOD AND AB.CURRENCY_ID = '(USA) $'
LEFT OUTER JOIN (
                 SELECT YEAR, Month_Num, Month_Index, Period
                 FROM UFC_Calander 
                 GROUP BY YEAR, Month_Num, Month_Index, Period
                 ) AS ind
ON per.ACCT_YEAR = ind.YEAR AND per.ACCT_PERIOD = ind.Month_Num

WHERE ID IN  ('120-1140-0000','120-1190-1190','120-1190-1193','120-1190-1194','210-2100-0000','210-2101-0000') 

GROUP BY ID, ind.Month_Index, ind.Period

ORDER BY ind.Month_Index DESC, ACCOUNT_ID DESC

Τυχόν sugestions που θα μπορούσαν να βελτιώσουν την απόδοση αυτού του ερωτήματος θα εκτιμηθεί ιδιαίτερα.

Δημοσιεύθηκε 09/10/2019 στις 19:03
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

συστάσεις υψηλό επίπεδο μου είναι οι εξής:

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

  • (Δεν είναι ένα πράγμα επιδόσεις, αλλά περισσότερο από μια μικρή αλλαγή). Η IsNull (SUM ... μέρος χρειάζεται μόνο εξαιτίας σας έχει ένα «A3.TYPE IN (“e”,“r”) ΤΟΤΕ NULL». Εάν είχε πει ΤΟΤΕ 0, θα μπορούσε να αποφύγει την μηδενική έλεγχο.

  • Μια συσχετισμένη υποερώτημα στο πλαίσιο της επιλογής είναι καλά, αλλά ένα πολυ-τμήμα της ενταχθούν ότι είναι πιο πιθανό αποτέλεσμα να επιβραδύνει. Δεν είμαι σίγουρος 100% σίγουροι για το πώς μπορείτε να σπάσει αυτό πέρα ​​να είναι δύο ξεχωριστές λογικές αρπαγές των δεδομένων και στη συνέχεια εντάχθηκε και πάλι μαζί, αλλά είναι το καλύτερο που πήρα με αυτό που βλέπω εδώ.

Απαντήθηκε 09/10/2019 στις 23:16
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more