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

 

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

ORDER BY και SELECT TOP 100 PERCENT σε subquery

Îåêßíçóå áðü ôï ìÝëïò cap. Τελευταία δημοσίευση από το μέλος cap στις 04-04-2011, 12:17. Υπάρχουν 11 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  03-04-2011, 19:22 64865

    ORDER BY και SELECT TOP 100 PERCENT σε subquery

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

    Εχω ένα πινακάκι που αποτελειται από τρία πεδία:

    id int identity
    title nvarchar(100)
    ord int

    Θέλω να φέρω τα id, title ταξινομημένα κατά ord. Μέχρι εδώ καλά. Θέλω όμως να κοτσάρω και μια πρώτη εγγραφή, η οποία δεν βρίσκεται στον πίνακα, με τίτλο π.χ. "Please select a value". Το σημαντικό εδώ είναι ότι για διάφορους λόγους πρέπει να φέρω ΑΚΡΙΒΩΣ τα δύο αυτά πεδία, με συγκεκριμένα ονόματα, και κανένα άλλο.

    Ετσι λοιπόν δεν μπορώ να κάνω αυτό:

    select N'--- Please select a value' as mytitle, 0 as myid ,0 as ord
    union all
    select title as mytitle, id as myid,ord from mytable
    order by ord asc
    (mytitle, myid είναι τα υποτιθέμενα aliases που θα πρέπει να χρησιμοποιήσω). 
    Αν το κάνω αυτό, τότε παίρνω και τη στήλη ord που δεν τη θέλω.


    Μπορώ όμως να κάνω αυτό:
    select N'--- Please select a value' as mytitle, 0 as myid
    union all
    select tmp.myid, tmp.mytitle from (
    select top 100 percent title as mytitle, id as myid from mytable
    order by mytable.ord asc
    ) tmp
    Επειδή είμαι σε subquery που κανονικά απαγορεύεται το order by, χρησιμοποιώ το top 100 percent. Και, όπως θα καταλάβατε, σε όρους ordering παίρνω το παπάκι εις διπλούν (sic), αλλιώς δεν θα σας έγραφα το συγκεκριμένο post. Ο λόγος είναι οτι ο SQL Server 2008 αγνοεί το top 100 percent και το order by σε subquery, όπως γράφει ο φιλαράκος μας ο Pinal Dave εδω. (Εντάξει, δεν γράφει αυτό ακριβώς, αλλά από τα συμφραζόμενα αυτό βγαίνει). 

    Ο μόνος τρόπος να πετύχω αυτό που θέλω και να δουλέψει αυτό το ordering είναι να χρησιμοποιήσω το 99.99 percent. Και ερωτώ: Είναι σωστό; Μήπως υπάρχει κάτι άλλο που θα μπορούσα / θα έπρεπε να δοκιμάσω;










    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  03-04-2011, 20:40 64866 σε απάντηση της 64865

    Απ: ORDER BY και SELECT TOP 100 PERCENT σε subquery

    Σωτήρη, πρόκειται για DropDownList; Αν ναι, κοίταξε αυτό το thread.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  03-04-2011, 20:49 64867 σε απάντηση της 64866

    Απ: ORDER BY και SELECT TOP 100 PERCENT σε subquery

    Πρόκειται για dropdown, ναι, αλλά όχι asp.net dropdownlist. Για την ακρίβεια, είναι το dropdown field του Datasprings Dynamic Forms for DotNetNuke :)

    Αυτό παίρνει τις τιμές του μεταξύ άλλων και από query, για διάφορους λόγους θέλω και η default value να έρχεται από το query.


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  03-04-2011, 21:03 64868 σε απάντηση της 64867

    Απ: ORDER BY και SELECT TOP 100 PERCENT σε subquery

    Το να έρθει με το query είναι η προφανής λύση, αλλά μπορείς να εισάγεις την τιμή με απλό insert αφού ολοκληρωθεί το databound event (π.χ. ddl.items.insert(ixd,message)). Ξέρω, η σύνταξη είναι λίγο "αφαιρετική", αλλά νομίζω είναι κατανοητό αυτό που θέλω να πω.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  03-04-2011, 21:34 64871 σε απάντηση της 64868

    Απ: ORDER BY και SELECT TOP 100 PERCENT σε subquery

    Να ξαναπώ οτι το μόνο μου interface με το συγκεκριμένο dropdown είναι ένα query. Δεν μπορώ να γράψω οποιουδήποτε είδους κώδικα, και το query πρέπει να φέρνει ΜΟΝΟ δύο πεδία, με τη σωστή σειρά, και συγκεκριμένα aliases.


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  03-04-2011, 22:56 64872 σε απάντηση της 64871

    Απ: ORDER BY και SELECT TOP 100 PERCENT σε subquery

    cap:
    Να ξαναπώ οτι το μόνο μου interface με το συγκεκριμένο dropdown είναι ένα query....



    Συγγνώμη. Δικιά μου παρανόηση. Όσον αφορά την αντικατάσταση του 100% από 99.99% θα απαντήσω το προφανές: Περιμένω να μην λειτουργήσει το query όταν το πλήθος των εγγραφών υπερβαίνει τις 10.000 (δεν το δοκίμασα βέβαια).

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  03-04-2011, 23:23 64873 σε απάντηση της 64872

    Απ: ORDER BY και SELECT TOP 100 PERCENT σε subquery

    Εδώ που τα λέμε, δίκιο είχες να το παρανοήσεις. Ελεγα "να ξαναπώ" αλλά διαπίστωσα οτι δεν ήμουν ξεκάθαρος αρχικά, και φυσικά δεν το είχα αποσαφηνίσει από την αρχή. Το συγκεκριμένο module το έχω μόνο σε executable μορφή, είναι generic χρήσης και φυσικά δεν μπορώ να επέμβω στον κώδικα (και δεν θέλω κιόλας :) )


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  03-04-2011, 23:27 64874 σε απάντηση της 64872

    Απ: ORDER BY και SELECT TOP 100 PERCENT σε subquery

    Σωτήρη, δοκίμασα το παρακάτω και νομίζω ότι είναι αυτό ψάχνεις. Μπορεί, όμως, να υπάρχει και καλύτερη λύση...

    SELECT     TOP (100) PERCENT myID, FN, LN
    FROM         (SELECT     0 AS myID, 'Insert first name' AS FN, 'Insert last name' AS LN, '9999/12/31' AS AddDate
                           UNION ALL
                           SELECT     ContactID AS myID, FirstName AS FN, LastName AS LN, AddDate
                           FROM         dbo.Contact) AS t
    ORDER BY AddDate DESC
    Στο παραπάνω query θέλω όλες οι εγγραφές να ταξινομούνται κατά φθίνουσα διάταξη ως προς την ημερομηνία προσθήκης. Συνεπώς, στην dummy εγγραφή δίνω μια μέγιστη τιμή για την ημερομηνία και ησυχάζω. Βεβαίως, το πεδίο της ημερομηνίας δεν εμφανίζεται στο τελικό αποτέλεσμα. Τώρα, γιατί χρησιμοποίησα τρία πεδία αντί για δύο... ούτε κι εγώ το κατάλαβα.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  03-04-2011, 23:30 64875 σε απάντηση της 64865

    Απ: ORDER BY και SELECT TOP 100 PERCENT σε subquery

    Αυτό ίσως σε βοηθήσει.

     

    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT  mytitle, myid
    FROM 
    (
    	SELECT 'SELECT A VALUE' AS mytitle, 0 AS myid, 0 AS ord 
    	UNION ALL
    	SELECT mytitle, myid , ord FROM myTable
    ) TMP
    ORDER BY TMP.ord ASC
  •  04-04-2011, 00:38 64877 σε απάντηση της 64875

    Απ: ORDER BY και SELECT TOP 100 PERCENT σε subquery

    @markos, libra storm:
    Σας ευχαριστώ και τους δύο. Πω πω, αισθάνομαι σαν rookie! Ούτε που το σκέφτηκα να βγάλω το order by στο εξωτερικό select προσθέτοντας το fake record στο resultset με φτιαχτό ord πεδίο! 

    Επισήμως μπορώ να χαρακτηρίσω αυτό το post ένα από αυτά που θα ντρέπομαι να ξαναδιαβάσω :) 


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  04-04-2011, 11:29 64904 σε απάντηση της 64877

    Απ: ORDER BY και SELECT TOP 100 PERCENT σε subquery

    Πφφ, κι εσύ, κάνεις σαν άνθρωπος που έχει 5 χρόνια να γράψει κώδικα! Stick out tongue


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  04-04-2011, 12:17 64905 σε απάντηση της 64904

    Απ: ORDER BY και SELECT TOP 100 PERCENT σε subquery

    E,οχι και 5! 
    4.9.  :)



    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

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