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

 

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

Συνδιασμός εγγραφών απο διαφορετικους πινακες

Îåêßíçóå áðü ôï ìÝëïò sqlnovice. Τελευταία δημοσίευση από το μέλος sqlnovice στις 31-07-2006, 23:06. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  27-07-2006, 22:10 15278

    Confused [8-)] Συνδιασμός εγγραφών απο διαφορετικους πινακες

    Εχω φτιαξει τους εξης πινακες :

     

    << η στηλη  letter περιεχει σαν εγγραφες τα K,S,R,T,Q,A,M και η στηλη number τα 10,20,30,40,5,15,25  αντιστοιχα>> 

    CREATE TABLE [word] (

                    [letter] [char] (3) COLLATE Greek_CI_AS NOT NULL ,

                    [number] [int] NOT NULL ,

                     PRIMARY KEY  CLUSTERED

                    (

                                    [letter]

                    )  ON [PRIMARY]

    ) ON [PRIMARY]

    GO

     

    << η στηλη  letter περιεχει σαν εγγραφες τα S1,S2,S3 και η στηλη number τα 21,22,24 αντιστοιχα>> 

    CREATE TABLE [more_S] (

                    [letterS] [char] (3) COLLATE Greek_CI_AS NOT NULL ,

                    [letterW] [char] (3) COLLATE Greek_CI_AS NOT NULL ,

                    [numberS] [int] NOT NULL ,

                     PRIMARY KEY  CLUSTERED

                    (

                                    [letterS]

                    )  ON [PRIMARY] ,

                    CONSTRAINT [foreign_letterW] FOREIGN KEY

                    (

                                    [letterW]

                    ) REFERENCES [word] (

                                    [letter]

                    )

    ) ON [PRIMARY]

    GO

     

    << η στηλη  letter περιεχει σαν εγγραφες τα T1,T2 και η στηλη number τα 41,42  αντιστοιχα>>

    CREATE TABLE [more_T] (

                    [letterT] [char] (3) COLLATE Greek_CI_AS NOT NULL ,

                    [letterW] [char] (3) COLLATE Greek_CI_AS NOT NULL ,

                    [numberT] [int] NOT NULL ,

                     PRIMARY KEY  CLUSTERED

                    (

                                    [letterT]

                    )  ON [PRIMARY] ,

                    CONSTRAINT [foreign_letterWT] FOREIGN KEY

                    (

                                    [letterW]

                    ) REFERENCES [word] (

                                    [letter]

                    )

    ) ON [PRIMARY]

    GO

     

    Σαν αποτελεσμα θελω να βγαλω συνδιασμους γραμματων όπως

    K, S1, R, T, Q, A, M .

    K, S1, R, T1, Q, A, M .

    K, S2, R, T, Q, A, M .  και ουτω καθεξης

    και στη συνεχεια να βρισκω το αθροισμα κάθε συνδιασμου

     

    Μπορει καποιος να με βοηθησει ;

     

      

     

  •  28-07-2006, 10:29 15282 σε απάντηση της 15278

    Απ: Συνδιασμός εγγραφών απο διαφορετικους πινακες

    συγγνώμη αλλά αν κατάλαβα καλά τι θέλεις να κάνεις. Οι συνδυασμοί γραμμάτων που γράφεις πως προκείπτουν; αν στο K,S,R,T,Q,A,M αντικαταστίσεις το S με τα S1,S2,... και το T με τα T1,T2,... Αλλά το άθροισμα κάθε συνδυασμού; των αριθμών που αντιστοιχούν στα γράμματα;

    1. άλλαξε τον τύπο των στηλών από char[3] σε nchar[3] για να έχεις το κεφάλι σου σίγουρο.

    2. Προσωπικά δεν ορίζω ποτέ κλειδί τύπο string. Άντε να κάνεις join πάνω σε string πεδία και θα με θυμιθείς

    3.Ελπίζω μέσα στην ημέρα να βρω χρόνο να σου δώσω και το query που θές
  •  28-07-2006, 11:00 15283 σε απάντηση της 15278

    Απ: Συνδιασμός εγγραφών απο διαφορετικους πινακες

    Υποθέτω ότι ψάχνεις κάτι τόσο απλό όσο το παρακάτω:



    declare @sum1 int, @sum2 int, @sum3 int

    select @sum1 = sum(number) from word where letter in ('k', 's1', 'r', 't', 'q', 'a')
    select @sum2 = sum(numberS) from more_S where letterS in ('k', 's1', 'r', 't', 'q', 'a')
    select @sum3 = sum(numberT) from more_T where letterT in ('k', 's1', 'r', 't', 'q', 'a')

    select isnull(@sum1, 0) + isnull(@sum2,0) + isnull(@sum3,0)

     

    Αν το θες πιο δυναμικό δοκίμεσέ το έτσι:



    declare @comb table (L char(3))

    insert into @comb values ('k')
    insert into @comb values ('s1')
    insert into @comb values ('r')
    insert into @comb values ('t')
    insert into @comb values ('q')
    insert into @comb values ('a')

    declare @sum1 int, @sum2 int, @sum3 int

    select @sum1 = sum(number) from word where letter in (select L from @comb)
    select @sum2 = sum(numberS) from more_S where letterS in (select L from @comb)
    select @sum3 = sum(numberT) from more_T where letterT in (select L from @comb)

    select isnull(@sum1, 0) + isnull(@sum2,0) + isnull(@sum3,0)

    Επίσης μπορείς να γραψεις τα 4 τελευταία select από τον παραπάνω κώδικα σαν ένα ως εξής:

    select
    (select  isnull(sum(number), 0) from word where letter in (select L from @comb)) +
    (select  isnull(sum(numberS), 0) from more_S where letterS in (select L from @comb)) +
    (select isnull(sum(numberT), 0) from more_T where letterT in (select L from @comb))

    Ελπίζω να σε βοήθησα

    rousso


    rousso
  •  31-07-2006, 23:06 15357 σε απάντηση της 15278

    Απ: Συνδιασμός εγγραφών απο διαφορετικους πινακες

    Ευχαριστω παρα πολυ rousso με γλιτωσες απο πολυ αγχος

    επειδη οπως θα καταλαβες ειμαι ψιλο-πολυ ασχετος μπορεις να μου πεις αν μαζι με το αποτελεσμα του αθροισματος μπορω να εμφανιζω και τον συνδιασμο των γραμματων;

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