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

 

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

Dynamic Cross-Tabs/Pivot Tables

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

    Stick out tongue [:P] Dynamic Cross-Tabs/Pivot Tables

    Σήμερα (Παρ 17/3/2006) στο Dev Days αναρωτηθήκαμε εάν γίνεται στο SQL Server 2000 να κάνουμε ένα δυναμικό «Pivot Table».

    O SQL Server 2005 το έχει αυτό χαρακτηριστικό πλέον build in.

     

    Απλά σας παραθέτω το link:http://www.sqlteam.com/item.asp?ItemID=2955

     

     


    while (!dead) learn();
  •  18-03-2006, 19:29 10794 σε απάντηση της 10775

    Απ: Dynamic Cross-Tabs/Pivot Tables

    Ο τελεστής PIVOT δεν είναι και η πιο ενδιαφέρουσα προσθήκη στον SQL Server 2005. Ουσιαστικά κάνει ότι και μία από τις λύσεις που προτείνονται, ένα GROUP BY με μερικά CASE. Μάλιστα, απαιτεί τον ίδιο χώρο με το GROUP BY!



    Η λύση που προτείνεται πάντως στο sqlteam δεν με ενθουσιάζει. Αν είναι να φτιάξεις δυναμικό SQL, γιατί να μην το ετοιμάσεις στον client και να τελειώνεις? Γιατί να φτιάχνεις strings χρησιμοποιώντας T-SQL? Εντάξει, μπορείς να χρησιμοποιήσεις τον κώδικα και στον server, σε stored procedures, αλλά θα πρέπει να αντιμετωπίσεις όλα τα προβλήματα του dynamic SQL!



    Νομίζω ότι στην συγκεκριμένη περίπτωση θα ήταν πιο χρήσιμο να φτιαχτεί ένα stored procedure σε .ΝΕΤ το οποίο θα δημιουργούσε το τελικό SQL. Θα είναι σίγουρα γρηγορότερο από το string manipulation σε T-SQL.



    Υποψιάζομαι πάντως ότι δεν υπάρχει τρόπος να κάνει κάποιος ένα δυναμικό PIVOT χωρίς dynamic SQL και recompilations. Ο λόγος είναι ότι ο αριθμός των πεδίων που επιστρέφονται από ένα πίνακα είναι βασική παράμετρος του κάθε execution plan. Αν αυτές αλλάζουν από εκτέλεση σε εκτέλεση, αναγκαστικά το query θα πρέπει να γίνει recompile. Αυτό είναι κακό, καθώς οι λύσεις για PIVOT βασίζονται είτε στη χρήση του GROUP BY ή σε διαδοχικά self joins, μία φορά για κάθε στήλη. Και οι δύο περιπτώσεις είναι αρκετά ακριβές αν απαιτείται recompilation.



    Ίσως τελικά η καλύτερη λύση είναι να χρησιμοποιούμε τις διάφορες στατικές εκδόσεις του PIVOT και να κρατάμε το δυναμικό PIVOT μόνο για την έσχατη ανάγκη.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  18-03-2006, 20:25 10796 σε απάντηση της 10794

    Απ: Dynamic Cross-Tabs/Pivot Tables

     pkanavos wrote:
    Νομίζω ότι στην συγκεκριμένη περίπτωση θα ήταν πιο χρήσιμο να φτιαχτεί ένα stored procedure σε .ΝΕΤ το οποίο θα δημιουργούσε το τελικό SQL. Θα είναι σίγουρα γρηγορότερο από το string manipulation σε T-SQL.

    Αν και με τη managed SP, θα έχεις μεν γρηγορότερο string manipulation αλλά αργότερο δε rowset operation...


    Vir prudens non contra ventum mingit
  •  18-03-2006, 20:35 10799 σε απάντηση της 10796

    Απ: Dynamic Cross-Tabs/Pivot Tables

    Το σκεφτόμουνα μόνο για τη δημιουργία του T-SQL, όχι για την εκτέλεση του. Θα πρέπει ο χρόνος που απαιτείται για το string manipulation να είναι σημαντικά μεγαλύτερος για να σκεφτώ να εκτελέσω το query μέσα από .NET assembly.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  18-03-2006, 20:54 10800 σε απάντηση της 10799

    Απ: Dynamic Cross-Tabs/Pivot Tables

    Ναι, σωστά...

    Τώρα που το σκέφτομαι... Μήπως θα ήταν ενδιαφέρουσα μια λύση ενός managed SP που θα pivotάρει τα data; Ίσως για συγκερκιμένα μεγέθη του rowset να υπάρχει performance gain, δηλαδή αντί να βάλεις τον server να εκτελέσει πολύπλοκα statements, να τραβήξεις τα data και να κάνεις με managed κώδικα τον μετασχηματισμό...

    Τώρα που το ξανασκέφτομαι... Αν είχαμε LINQ... Smile [:)]


    Vir prudens non contra ventum mingit
  •  19-03-2006, 07:35 10811 σε απάντηση της 10794

    Απ: Dynamic Cross-Tabs/Pivot Tables

    Αγαπητέ Παναγιώτη έχεις δίκιο, άλλα έκανα το post γιατί το ζητήσανε μερικά παιδιά στο DavDays μετά από συζήτηση.

    Τώρα όμως που υπάρχει ο SQL Server 2005 δεν έχει πλέον νόημα

    Ευχαριστώ για το ενδιαφέρων


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