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

 

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

SQL columns to rows

Îåêßíçóå áðü ôï ìÝëïò Δημήτρης Μπούνδρης. Τελευταία δημοσίευση από το μέλος immortality στις 20-09-2007, 23:47. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  06-09-2007, 11:55 34771

    SQL columns to rows

    Θα ήθελα να σας βάλω λιγάκι σε σκέψη, αλλά νομίζω ότι όλο και θα το έχετε χρησιμοποιήσει κάποτε.

    Έχω ένα πίνακα στήλη με 50 rows με τιμή VARCHAR2.

    Επίσης έχω μια λίστα excel με 30 τιμές ίδιου τύπου με τον πίνακα.

    Κάποιες από αυτές τις τιμές είναι κοινές με το πίνακά μου και κάποιες άλλες δεν υπάρχουν σε αυτόν.

    Θα ήθελα ένα τρόπο αν γίνεται μόνο με απλή sql, pl/sql να βρώ ποιες τιμές στο excel δεν υπάρχουν στον πίνακα.

    Με άλλα λόγια πώς μπορώ να μετατρέψω columns σε rows?


    Dimitris Boundris
    Software Engineer
  •  06-09-2007, 12:19 34777 σε απάντηση της 34771

    Απ: SQL columns to rows

    Πως σκοπεύεις να κάνεις τον integration βάσης και excel; Έχει σημασία, έτσι δεν είναι;

    Κατά τα άλλα το excel διαθέτει συνάρτηση που μετατρέπει γραμμές σε στήλες ή το αντίστροφο. Δες εδώ. Δεν ξέρω αν βοηθάει.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  06-09-2007, 12:38 34781 σε απάντηση της 34777

    Απ: SQL columns to rows

    Δεν είναι το πρόβλημά μου το excel.

    Για παράδειγμα στη στήλη COL του πίνακα Α έχω τις τιμές 1, 2,3,4,5 (5 rows).

    Μου δίνουν τις τιμές 3,4,5,6,7,8(δεν έχει σημασία πως) και πρέπει να βρω ποιες τιμές από αυτές δεν υπάρχουν στον πίνακα Α(δηλ. 6,7,8).

    Βέβαια στο παράδειγμα έχουμε 5 τιμές αλλά θα μπορούσε να είναι 500.

    Εαν μπορούσα να έχω ένα πίνακα Β με τις τιμές που μου έδιναν(στην στηλη COL) τότε με ένα query

    SELECT COL FROM B MINUS SELECT COL FROM A

    θα είχα το αποτέλεσμα.


    Dimitris Boundris
    Software Engineer
  •  06-09-2007, 13:40 34786 σε απάντηση της 34781

    Απ: SQL columns to rows

    Δεν ξέρω αν καταλαβαίνω καλά, αλλά κάτι τέτοιο;

    SELECT COL FROM B WHERE B NOT IN (SELECT COL FROM A) 


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  06-09-2007, 14:16 34789 σε απάντηση της 34771

    Απ: SQL columns to rows

    Αν οι τιμές που σου έρχονται είναι μέσα σέ κάποιο πίνακα κανονικό ή temporary του SQL τότε μπορείς να κανεις αυτο που σου είπε ο Δημήτρης

    SELECT COL FROM B WHERE COL NOT IN (SELECT COL FROM A)  ή

    SELECT COL FROM B WHERE NOT EXISTS (SELECT * FROM A WHERE A.COL=B.COL)

    Δέν υπάρχει καμμία διαφορά στις δύο μεθόδους του Query

     


    Ιωάννης Μανουσάκης
  •  06-09-2007, 15:14 34799 σε απάντηση της 34789

    Απ: SQL columns to rows

    Καλά καταλάβατε(MINUS είναι το ίδιο για την Oracle).

    Ομως o πίνακα B δεν υπάρχει(αλλιώς θα ήταν εύκολο), αλλά έχουμε κάποιες τιμές από ένα αρχείο(π.χ excel). Θα μπορούμε δηλαδή να γράψουμε

    SELECT '3', '4', '5', '6', '7', '8' FROM DUAL; Πώς όμως αυτή την γραμμή θα μπορούσουμε να την μετατρέψουμε σε 5 rows για να παράξουμε τον πίνακα B;

    (O πίνακας A υπάρχει)


    Dimitris Boundris
    Software Engineer
  •  09-09-2007, 22:32 34893 σε απάντηση της 34799

    Απ: SQL columns to rows

    Γιατί επιμένεις να μετατρέψεις τις στήλες σε γραμμές σε SQL? Όχι ότι δεν υπάρχουν τρόποι, αλλά δεν είναι και πολλοί ωραίοι και σίγουρα δεν παίζουν σε μεταβλητό αριθμό στηλών. Γιατί να μην κάνεις τη μετατροπή σε Excel? Ή ακόμα καλύτερα, γιατί δεν περνάς τις τιμές από το Excel στη βάση σε ένα temporary πίνακα ανά στήλες?


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  10-09-2007, 07:59 34896 σε απάντηση της 34893

    Απ: SQL columns to rows

      Νομίζω ότι ο Παναγιώτης σου απάντησε πολύ καλά .

     Εγώ στην θέση σου θα πέρναγα σέ ένα temporary πίνακα τις τμές που μου έρχονται από το excel και κατόπιν θα χρησιμοποιούσα sql statements για να κάνω την δουλεία μου.

    Στο άρθρο που έχω δημοσιεύση στο blog μου Διαχωρισμός Delimited String στον SQL η συνάρτηση που υπάρχει μπορεί να σου χρησιμεύσει για να κάνεις την εισαγωγή τών τιμών '1','2','3','4','5','6' που θέλεις σέ rows του temporary πίνακα http://www.dotnetzone.gr/cs/blogs/imanoussakis/archive/2006/02/11/9534.aspx


    Ιωάννης Μανουσάκης
  •  20-09-2007, 23:47 35204 σε απάντηση της 34896

    Απ: SQL columns to rows

    Έστω οτι το xls βρίσκεται στο c:\test.xls και τα data στο sheet1 του excel.
    Μπορείς να χρησιμοποιήσεις κάτι τέτοιο:

    WITH B AS
    (
      SELECT COL
      FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
       'Data Source=c:\test.xls;Extended Properties=Excel 8.0')...sheet1$
    )

    SELECT *
    FROM A
    WHERE COL NOT IN (SELECT COL FROM B);

    Για το παραπάνω θα πρέπει να έχεις ενεργοποιημένο το 'Ad Hoc Distributed Queries'

    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    sp_configure 'Ad Hoc Distributed Queries', 1;
    GO
    RECONFIGURE;
    GO

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