Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα,

 

Να ρωτήσω έχω μια Βάση και έναν πίνακα με 3 στήλές όπου είναι:

 

Κωδικός Φορτίου   Μέγεθος Φορτίου    Μάρκα Μεταφορικού του φορτίου 

 

Στην στήλη Μέγεθος Φορτίου είναι απο 10.800 μέχρι 95.565 
Θέλω να ομαδοποιήσω σε SQL Server έτσι ώστε να έχω ομαδοποίηση ως εξής:

  •   απο 10Κ εώς 20Κ είναι 50 Φορτία
  •  απο 20Κ εώς 30Κ ειναι ....
  • ....
  • ....
  • απο 80Κ εώς 90Κ είναι ...

 

Καμία βοήθεια;

Δημοσ.

Αν είναι πεπερασμένος ο αριθμός των περιπτώσεων, η λύση είναι το case

 

case

when MegethosFortiou between 10000 and 2000 then 50

when MegethosFortiou between 20001 and 30001 then 60

....

end

Δημοσ.

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,

.....

Δημοσ.

μια dirty λύση για μη πεπερασμένο αριθμό περιπτώσεων που μου έρχεται

 

κάνεις τα μεγέθη

floor(μεγεθος/10)*10

και μετά κάνεις group by και sum

 

οπότε έχεις

 

0<= μέγεθος < 10

10<= μέγεθος < 20

20<= μέγεθος < 30

........

  • Like 2
Δημοσ.

Καθόλου dirty!

Μπορείς βέβαια να παραλείψεις το *10, και να πάρεις 0,1,2,3.....

Και μάλλον θα πρέπει μετά να κάνεις count και όχι sum (αν έχω καταλάβει σωστά).

Δημοσ.

Ελπίζω αυτό να ήθελες να κάνεις.Δοκιμάστηκε σε 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

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...