Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Ερώτημα MS-SQL

Îåêßíçóå áðü ôï ìÝëïò infoCENTER. Τελευταία δημοσίευση από το μέλος infoCENTER στις 10-02-2010, 22:11. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  09-02-2010, 14:07 57039

    Ερώτημα MS-SQL

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

    Έχω μία βάση με μερικούς πίνακες. Στο συγκεκριμένο ερώτημα με αφορούν τρεις.

    Ας τους ονομάσουμε Α, Β και Γ.

    Ο Α περιέχει τις εγγραφές, είναι βασικά ο κύριος πίνακας της εφαρμογής. Για τις ανάγκες του παραδείγματος ας πούμε ότι περιέχει πληροφορίες τιμολόγησης.

    Ο Β περιέχει πληροφορίες που αφορούν τις ενέργειες που έχουν γίνει για την κάθε εγγραφή του Α. (Τα προϊόντα έφυγαν από την εταιρεία, πήραμε τηλέφωνο να έρθουν να τα παραλάβουν κτλ) Οπότε Α - Β σχέση 1 - *.  Στον πίνακα αυτόν υπάρχει ένα πεδίο ημερομηνία που αναφέρεται στο πότε έγινε η ενέργεια.

    Ο Γ περιέχει τα ονόματα αυτόν που απευθυνθήκαμε για τις ενέργειες. Οπότε Β - Γ σχέση * - 1

    Το ερώτημα είναι το εξής:

    Θέλω να πάρω μία λίστα των εταιρειών στον πίνακα Γ για παραγγελείες που ήδη έχω τιμολογήση και η τελευταία ενέργεια που έχω κάνει για την τιμολόγηση είναι να έρθουν να τα παραλάβουν. Αυτό που ζητάω βασικά είναι

    ΜΕΤΑΦΟΡΙΚΗ Χ    30

    ΜΕΤΑΦΟΡΙΚΗ Υ    15 κτλ

    Δεν ζητάω δηλαδή στην φάση αυτή να δω ποιες είναι αλλά αριθμητικά μόνο τον αριθμό των εκκρεμοτήτων.

    Επίσης η SP δεν θα δέχεται καμία παράμετρο εισόδου που να καθορίζει ίσως το χρονικό διάστημα που ψάχνω.

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

    Μπορεί κανείς να μου δώσει την λύση;

    Ευχαριστώ.

  •  09-02-2010, 16:53 57040 σε απάντηση της 57039

    Απ: Ερώτημα MS-SQL

    Αν κατάλαβα καλά έχεις περίπου το παρακάτω schema.

    TABLE [Trader](
     [Id] [int] IDENTITY(1,1) NOT NULL,
     [Name] [nvarchar](64) NOT NULL,
     [Phone] [nvarchar](64) NOT NULL,

    [TransactionType](
     [Id] [int] NOT NULL,
     [Name] [nvarchar](64) NOT NULL,

    [Transaction](
     [Id] [int] IDENTITY(1,1) NOT NULL,
     [TransactionTypeId] [int] NOT NULL,
     [TraderId] [int] NOT NULL,
     [TransactionDate] [smalldatetime] NOT NULL,
     [OrderId] [int] NULL,

    TABLE [Order](
     [Id] [int] IDENTITY(1,1) NOT NULL,
     [OrderDate] [smalldatetime] NOT NULL,
     [TraderId] [int] NOT NULL,

     

    Και θέλεις το παρακάτω stored Proc


    CREATE PROCEDURE [dbo].[GetTraderWithPendingOrders]
    AS
    BEGIN
     
    Select
     Trader.Id As TraderId ,
     Trader.Name,
     Trader.Phone,
     OrderCount.PendingOrderCount 
    from
     Trader inner join
     (
     select
      ts.TraderId,
      count(max_date.OrderId) As PendingOrderCount
     from
      [Transaction] ts inner join
      (
      SELECT
       t.OrderId,
       MAX(t.TransactionDate) As TransactionDate
      FROM
       [Transaction] t
      Group By t.OrderId
       ) max_Date
       on (ts.OrderId= max_Date.OrderId  And max_Date.TransactionDate=ts.TransactionDate and ts.TransactionTypeId=1)    /* TransactionType=PendingPickup */
      
       Group by ts.TraderId
       ) OrderCount  on OrderCount.TraderId=Trader.Id
       

    END

    GO

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

    TransactionType (Table) Έχει τις παρακάτω γραμμές
    Id Name
    1 PendingPickup
    2 PendingInvoice
    3 Complete


    Μπλουγουράς Γιάννης
    Wizcom O.E.
  •  10-02-2010, 22:11 57064 σε απάντηση της 57040

    Απ: Ερώτημα MS-SQL

    Σε ευχαριστώ. Το ερώτημα μου παρουσίασε τα αποτελέσματα όπως τα ήθελα.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems