SQL όρους περίπτωση που

ψήφοι
8

Έχω μια αποθηκευμένη διαδικασία που ονομάζεται spGetOrders που δέχεται μερικές παραμέτρους: @startdate και @enddate. Αυτό διερωτάται ένα «Παραγγελίες» πίνακα. Μία από τις στήλες του πίνακα που ονομάζεται «ClosedDate». Αυτή η στήλη θα κρατήσει NULL εάν η παραγγελία δεν έχει κλείσει ή μια τιμή ημερομηνίας αν έχει. Θα ήθελα να προσθέσω μια @Closed παράμετρος η οποία θα λάβει μια τιμή bit. Σε ένα απλό κόσμο, θα ήθελα να είναι σε θέση να το κάνουμε ..

select * from orders o
where o.orderdate between @startdate AND @enddate
and (if @Closed = 1 then o.ClosedDate IS NULL else o.ClosedDate IS NOT NULL)

Προφανώς, αυτό δεν πρόκειται να λειτουργήσει .. Είμαι, επίσης, κοιτάζοντας δυναμική sql η οποία είναι η τελευταία λύση μου, αλλά αρχίζει να μοιάζει με την απάντηση ..

Παρακαλώ βοηθήστε..

Δημοσιεύθηκε 09/12/2008 στις 17:42
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
14

Δοκιμάστε αυτό:

select * from orders o
where o.orderdate between @startdate AND @enddate
and ((@Closed = 1 And o.ClosedDate IS NULL) Or (@Closed = 0 And o.ClosedDate IS NOT NULL))

Να ποικίλλουν προσεκτικοί σχετικά με την ανάμειξη ΚΑΙ και Ή στη ρήτρα πού. Όταν γίνει αυτό, η παρένθεση για τον έλεγχο η σειρά της αξιολόγησης είναι πολύ σημαντική.

Απαντήθηκε 09/12/2008 στις 17:48
πηγή χρήστη

ψήφοι
2

SQL δήλωση:

SELECT *  
FROM orders  
WHERE orderdate BETWEEN @startdate AND @enddate  
AND (@Closed = 1 OR CLosedDate IS NOT NULL)
Απαντήθηκε 09/12/2008 στις 17:46
πηγή χρήστη

ψήφοι
0

Basicly, να γράψει.

select * from orders o
where o.orderdate between @startdate AND @enddate
and ((@Closed = 1 and o.ClosedDate IS NULL)
    or (@Closed != 1 and o.ClosedDate IS NOT NULL))

διπλή, μπορεί να αφαιρεθεί

Απαντήθηκε 09/12/2008 στις 17:50
πηγή χρήστη

ψήφοι
0

Ή αυτό:

select * from orders o
where o.orderdate between @startdate AND @enddate
and (  (@Closed = 1 AND o.ClosedDate IS NULL)
     OR (ISNULL(@Closed, 0) <> 1 AND o.ClosedDate IS NOT NULL)
     )

Μοιάζει θέλετε όλες τις παραγγελίες μεταξύ των δύο ημερομηνιών που έχουν ασυνεπή Κλείστε πληροφορίες. Οι άλλες προτάσεις είναι πιθανόν τόσο καλή (ή καλύτερα), αλλά είμαι σίγουρος ότι αυτό λειτουργεί και είναι αναγνώσιμο μου (οι περισσότερες από τις άλλες προτάσεις εμφανίστηκε ως ήμουν πληκτρολόγηση).

Καλή τύχη!

Απαντήθηκε 09/12/2008 στις 17:48
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more