2010-10-14 44 views
14

làm cách nào để kết hợp câu lệnh if lồng nhau trong mệnh đề chọn của truy vấn sql? Tôi biết để sử dụng trường hợp khi điều kiện sau đó X khác y kết thúc nhưng làm thế nào để bạn làm một lồng nhau trong cùng một thời trang cho mỗi bản ghi trong một bộ hồ sơ.tsql: có thể thực hiện các câu lệnh lồng nhau trong một lựa chọn không?

if x.boy is not null then 
    x.boy 
else if x.girl is not null 
    then x.girl 
else if x.dog is not null 
    then x.dog 
else 
    x.cat 

đây là nỗ lực của tôi:

SELECT top 10 
     id, 
     case when x.boy <> NULL then 
      x.boy 
     else case when x.girl <> NULL 
      x.girl 
       else case when x.dog <> NULL 
      x.dog 
       else x.cat 

     end as Who 
from house x 

điều này là đúng?

Trả lời

16

Bạn có thể đơn giản hóa này với COALESCE.

SELECT TOP 10 id, COALESCE(x.boy, x.girl, x.dog, x.cat) as Who 
    FROM house x 
16

Có. Không có gì sai với một trường hợp trong một trường hợp.

Mặc dù, đây là kịch bản của bạn, được viết corectly:

SELECT top 10 
    id, 
    case 
     when x.boy IS NOT NULL then x.boy 
     else case 
      when x.girl IS NOT NULL THEN x.girl 
      else case 
       when x.dog IS NOT NULL THEN x.dog 
       else x.cat 
      end 
     end 
    end as Who 
from house x 

HOẶC

SELECT top 10 
    id, 
    case 
     when x.boy IS NOT NULL then x.boy 
     when x.girl IS NOT NULL THEN x.girl 
     when x.dog IS NOT NULL THEN x.dog 
     else x.cat 
    end as Who 
from house x 

HOẶC

SELECT top 10 
    id, 
    coalesce(x.boy, x.girl, x.dog, x.cat) AS Who 
from house x 
+0

tôi gặp lỗi với 'as' ở cuối là Who .. bất kỳ ý tưởng nào tại sao? Lỗi – phill

+0

là cú pháp sai gần từ khóa 'dưới dạng'. – phill

+0

Câu trả lời của tôi có một vài cách khác nhau để viết câu lệnh của bạn đúng. Xem và thêm nhận xét của bạn –

0

Hãy thử điều này:

SELECT top 10 
     id, 
     case when x.boy Is Not NULL then x.boy 
     else 
       case when x.girl Is Not NULL then x.girl 
       else 
        case when x.dog Is Not Null Then x.dog 
        else x.cat End 
       End 

     end as Who 
from house x 

mặc dù bạn chỉ có thể sử dụng coalesce như Joe gợi ý.

Các vấn đề liên quan