2012-02-15 41 views
19

Đây là một simplication của vấn đề: Tôi có một lựa chọn mà trông như thế này:SQL cột có điều kiện trở lại dữ liệu trong một tuyên bố chọn

Select ID, Assignee, WorkStream from assignees; 

Và một snap shot của dữ liệu trả về trông như thế này

1|Joe Soap|Internal 

2|Mrs Balls|External 

Điều tôi muốn làm là chọn lựa không hiển thị tên Người được chỉ định nếu đường làm việc ở bên trong. Thay vào đó để hiển thị Workstream.

Vì vậy, ví dụ như kết quả tôi muốn đạt được sẽ là:

1|Internal|Internal 

2|Mrs Balls|External 

Tôi hy vọng điều này có ý nghĩa? Về cơ bản một lựa chọn có điều kiện có thể phát hiện nếu một cột nhất định có chứa một giá trị nhất định, sau đó thay thế một giá trị cột khác bằng [bất kỳ].

Cảm ơn trước!

EDIT Tôi muốn đạt được một cái gì đó như thế này:

Select ID, if (workstream='internal' select Workstream as Assignee - else - select Assignee as Assigneee), WorkStream from assignees; 

Trả lời

40

Bạn đã không đề cập đến DBMS của bạn nhưng một tìm kiếm CASE tuyên bố làm việc trong tất cả các DBMS lớn tôi biết đi.

SELECT ID 
     , CASE WHEN WorkStream = 'Internal' 
       THEN WorkStream 
       ELSE Assignee 
      END AS Assignee 
     , Workstream 
FROM assignees 

tham khảo: MSDN

TRƯỜNG HỢP

đánh giá một danh sách các điều kiện và trả về một trong nhiều biểu kết quả tốt.

+0

Tìm kiếm khá tốt, hãy để tôi thử nghiệm nhanh chóng! –

3
SELECT ID, 
     CASE WorkStream WHEN 'Internal' THEN 'INTERNAL' ELSE Assignee as Assignee, WorkStream from assignees 

Tôi hy vọng sự trợ giúp này.

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