2013-02-19 30 views
43

Tôi có một truy vấn trả về giá trị tỷ giá hối đoái được thiết lập trong hệ thống của chúng tôi. Không phải mọi đơn hàng sẽ có tỷ giá hối đoái (currate.currentrate) để nó trả về giá trị null.Truy vấn SQL, nếu giá trị bằng không thì trả về 1

Tôi có thể lấy nó để trả về 1 thay vì null không?

Cái gì đó như một câu lệnh if có thể:

if isnull(currate.currentrate) then 1 else currate.currentrate 

Đây là câu hỏi của tôi dưới đây. Tôi đánh giá rất cao sự giúp đỡ của bạn!

SELECT  orderhed.ordernum, orderhed.orderdate, currrate.currencycode, currrate.currentrate 
FROM   orderhed LEFT OUTER JOIN 
        currrate ON orderhed.company = currrate.company AND orderhed.orderdate = currrate.effectivedate 
+4

Xem [ 'ISNULL'] (http://msdn.microsoft.com/en-us/library/ms184325.aspx) tài liệu (đọc: sử dụng nó như thế nào nó được thiết kế) .. –

+1

@pst 'COALESCE' là một tiêu chuẩn SQL và thường được đề nghị trong những trường hợp này. cũng có những khác biệt đáng kể trong cách chúng phản ứng với các kiểu dữ liệu. có lẽ bạn nên báo trước nhận xét của mình với thông tin bổ sung như vậy. – swasheck

+0

@swasheck Tài liệu thực hiện điều đó. Nó cũng liên kết với COALESCE. –

Trả lời

74

Bạn có thể sử dụng câu lệnh CASE.

SELECT 
    CASE WHEN currate.currentrate IS NULL THEN 1 ELSE currate.currentrate END 
FROM ... 
+0

@pst - Sẽ không khó để thay đổi thứ tự hoạt động ... –

+1

Cảm ơn bạn @ ek0nomik rất nhiều vì sự giúp đỡ của bạn! Nó làm việc như một say mê! – jenhil34

+1

@ Ek0nomik Tôi thừa nhận sự tương đương ở trên và tôi không thấy rằng việc áp dụng một cuộc bỏ phiếu xuống để rút ra một điểm hoặc gợi ra một lời giải thích tốt hơn làm cho một "người cứng rắn trên Internet". –

39

Bạn có thể sử dụng COALESCE:

SELECT orderhed.ordernum, 
    orderhed.orderdate, 
    currrate.currencycode, 
    coalesce(currrate.currentrate, 1) as currentrate 
FROM orderhed 
LEFT OUTER JOIN currrate 
    ON orderhed.company = currrate.company 
    AND orderhed.orderdate = currrate.effectivedate 

Hoặc thậm chí IsNull():

SELECT orderhed.ordernum, 
    orderhed.orderdate, 
    currrate.currencycode, 
    IsNull(currrate.currentrate, 1) as currentrate 
FROM orderhed 
LEFT OUTER JOIN currrate 
    ON orderhed.company = currrate.company 
    AND orderhed.orderdate = currrate.effectivedate 

Dưới đây là một bài viết để giúp quyết định giữa COALESCEIsNull:

http://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/

+3

+1 bởi vì bạn có chân xanh. – Kermit

+3

@njk họ thực sự là ... Tôi là một phần smurf – Taryn

+0

Liên kết hữu ích. Bổ sung tuyệt vời cho câu trả lời này. – Ellesedil

2
SELECT orderhed.ordernum, orderhed.orderdate, currrate.currencycode, 

case(currrate.currentrate) when null then 1 else currrate.currentrate end 

FROM orderhed LEFT OUTER JOIN currrate ON orderhed.company = currrate.company AND orderhed.orderdate = currrate.effectivedate 
0

thử như dưới đây ...

CASE 
WHEN currate.currentrate is null THEN 1 
ELSE currate.currentrate 
END as currentrate 
-1

a) Nếu bạn muốn 0 khi giá trị là null

SELECT isnull(PartNum,0) AS PartNumber, PartID 
FROM Part 

b) Nếu bạn muốn 0 khi giá trị là null và nếu không 1

SELECT 
    (CASE 
    WHEN PartNum IS NULL THEN 0 
    ELSE 1 
    END) AS PartNumber, 
    PartID 
FROM Part