strat92man Δημοσ. 16 Ιανουαρίου 2014 Δημοσ. 16 Ιανουαρίου 2014 Καλησπέρα, Να ρωτήσω έχω μια Βάση και έναν πίνακα με 3 στήλές όπου είναι: Κωδικός Φορτίου Μέγεθος Φορτίου Μάρκα Μεταφορικού του φορτίου Στην στήλη Μέγεθος Φορτίου είναι απο 10.800 μέχρι 95.565 Θέλω να ομαδοποιήσω σε SQL Server έτσι ώστε να έχω ομαδοποίηση ως εξής: απο 10Κ εώς 20Κ είναι 50 Φορτία απο 20Κ εώς 30Κ ειναι .... .... .... απο 80Κ εώς 90Κ είναι ... Καμία βοήθεια;
Timonkaipumpa Δημοσ. 16 Ιανουαρίου 2014 Δημοσ. 16 Ιανουαρίου 2014 Με μία procedure και προσωρινές μεταβλητές το κάνεις και για παραμετροποιημένη κβάντωση.
tsipouro Δημοσ. 16 Ιανουαρίου 2014 Δημοσ. 16 Ιανουαρίου 2014 Αν είναι πεπερασμένος ο αριθμός των περιπτώσεων, η λύση είναι το case case when MegethosFortiou between 10000 and 2000 then 50 when MegethosFortiou between 20001 and 30001 then 60 .... end
nucleus Δημοσ. 16 Ιανουαρίου 2014 Δημοσ. 16 Ιανουαρίου 2014 Θέλεις να μετρήσεις πόσα φορτία έχουν Μέγεθος Φορτίου από 10Κ εώς 20Κ,απο 20Κ εώς 30Κ κοκ? 1
strat92man Δημοσ. 16 Ιανουαρίου 2014 Μέλος Δημοσ. 16 Ιανουαρίου 2014 nucleus ναι μπορείς να με βοηθήσεις;
tsipouro Δημοσ. 16 Ιανουαρίου 2014 Δημοσ. 16 Ιανουαρίου 2014 nucleus ναι μπορείς να με βοηθήσεις; Κάντο με sum και case ανά στήλη, όχι σε μία μόνο. select sum(case when megethos between 10 and 20 then 1 else 0 end) megethos1, sum(case when megethos between 21 and 30 then 1 else 0 end) megethos2, sum(case when megethos between 31 and 40 then 1 else 0 end) megethos3, .....
warlock9_0 Δημοσ. 16 Ιανουαρίου 2014 Δημοσ. 16 Ιανουαρίου 2014 μια dirty λύση για μη πεπερασμένο αριθμό περιπτώσεων που μου έρχεται κάνεις τα μεγέθη floor(μεγεθος/10)*10 και μετά κάνεις group by και sum οπότε έχεις 0<= μέγεθος < 10 10<= μέγεθος < 20 20<= μέγεθος < 30 ........ 2
geomagas Δημοσ. 16 Ιανουαρίου 2014 Δημοσ. 16 Ιανουαρίου 2014 Καθόλου dirty! Μπορείς βέβαια να παραλείψεις το *10, και να πάρεις 0,1,2,3..... Και μάλλον θα πρέπει μετά να κάνεις count και όχι sum (αν έχω καταλάβει σωστά).
nucleus Δημοσ. 17 Ιανουαρίου 2014 Δημοσ. 17 Ιανουαρίου 2014 Ελπίζω αυτό να ήθελες να κάνεις.Δοκιμάστηκε σε SQL Server 2008R2.Λογικά πρέπει να παίζει και σε 2005. Declare @startFrom int,@startTo int,@end int Select @startFrom=10000,@startTo=20000, @end=100000 ;With NumberSequence(NumberFrom,NumberTo) as ( Select @startFrom as NumberFrom,@startTo as NumberTo union all Select NumberFrom + 10000,NumberTo + 10000 from NumberSequence where NumberTo < @end ) select COUNT(megethos),marka FROM [TestDB].[dbo].[fortia],NumberSequence where megethos between NumberSequence.NumberFrom AND NumberSequence.NumberTo group by markaΓια δοκίμασε μια αυτό. Σημείωση θα πρέπει να αλλαχθούν τα ονόματα των στηλών και του Πίνακα στο select. megethos = Μέγεθος Φορτίου marka = Μάρκα Μεταφορικού του φορτίου [TestDB].[dbo].[fortia] = όνομα πίνακα που έχεις στην βάση. Το τι κάνει τώρα το παραπάνω. Αρχικά έχουμε αυτό Declare @startFrom int,@startTo int,@end int Select @startFrom=10000,@startTo=20000, @end=100000 ;With NumberSequence(NumberFrom,NumberTo) as ( Select @startFrom as NumberFrom,@startTo as NumberTo union all Select NumberFrom + 10000,NumberTo + 10000 from NumberSequence where NumberTo < @end )Σου φτιάχνει μια ακολουθία απο ζευγάρια τιμών της μορφής <κάτω όριο,άνω όριο> το κάτω όριο ξεκινά από το 10.000 και το άνω όριο από το 20.000.Το μέγιστο άνω όριο είναι το 100.000.Το βήμα είναι 10.000. Αν εκτελέσεις το παρακάτω query select * from NumberSequenceΘα δεις τα αποτελέσματα σαν τα παρακάτω NumberFrom NumberTo 10000 20000 20000 30000 30000 40000 40000 50000 50000 60000 60000 70000 70000 80000 80000 90000 90000 100000Το μόνο που έχουμε να κάνουμε μετά ειναι να πάρουμε μόνο τις τιμές που θέλουμε να έχουν μέγεθος ανάμεσα στις 2 παραπάνω τιμές. Μεγαλύτερες από το NumberFrom και μικρότερες από το NumberTo. Εναλλακτικά θα μπορούσες να χρησιμοποιήσεις τους τελεστές > και < και όχι τον BETWEEN. Περισσότερες πληροφορίες για τα παραπάνω Τελεστής BETWEEN http://technet.microsoft.com/en-us/library/ms187922.aspx Common Table Expressions(CTE) http://technet.microsoft.com/en-us/library/ms186243%28v=sql.105%29.aspx
defacer Δημοσ. 17 Ιανουαρίου 2014 Δημοσ. 17 Ιανουαρίου 2014 Αυτό που λέει ο warlock. Obvious and good.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα