Δεν είναι θέμα παραξενιάς, απλά .... το 1*3/6 είναι διαίρεση ακεραίων με αποτέλεσμα 0.5 δηλαδή 0.
Στο SQL statement που έγραψες ορίζεις μόνο το αποτέλεσμα ως decimal, όχι τους ίδιους τους αριθμούς. Από τη στιγμή που ο SQL Server δεν ξέρει τί τύπου είναι αυτοί οι αριθμοί θα προσπαθήσει να τους μεταφράσει σε όποια μορφή μπορεί. Όσοι αριθμοί έχουν δεκαδικό προφανώς είναι κάποια μορφή float ή decimal. Όσοι αριθμοί δεν έχουν είναι integer. Γι αυτό και το 1*3/6 καταλήγει 0. Αν προσθέσεις όμως ένα .0 θα θεωρηθούν όλοι δεκαδικοί, π.χ. το 1.0*3/6, το 1*3.0/6 ή το 1*3/6.0 θα επιστρέψουν όλα 0.5
Το ότι στο Excel υπάρχει μία συμπεριφορά και στον SQL άλλη δεν έχει καμμία απολύτως σημασία. Το Excel δεν είναι βάση δεδομένων, δεν έχει καν τύπους και βασίζεται πάντα σε μετατροπές για να καταλάβει αν κάτι είναι κείμενο ή κάτι άλλο. Για το excel τα πάντα είναι ή κείμενο ή αριθμός, ακόμα και οι ημερομηνίες.
Ο SQL Server όμως βασίζεται στους τύπους και πρέπει να μαντέψει τί τύπου είναι κάθε στοιχείο πριν το χρησιμοποιήσει.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos