2010-07-26 58 views
10

Tôi có một bảng như thế nàyChọn một cột cụ thể dựa trên giá trị của cột khác

ID | Type | Val0 | Val1 
1 | 0 | A | NULL 
2 | 1 | NULL | B 

tôi cần phải chọn Val0 khi loại là 0, và Val1 khi loại là 1, và ValN khi loại file là N ...

Tôi có thể làm như thế nào?

+0

Bạn có thể cung cấp mẫu sản phẩm dự kiến ​​không? –

+0

'SELECT ... WHERE ID = 1 - A' – BrunoLM

+0

Chỉ cần một bình luận nhanh: nếu bạn có các bảng như thế này, bạn thực sự nên xem xét một lược đồ khác. Cơ sở dữ liệu của bạn gần như chắc chắn không tuân theo mô hình quan hệ thực thể. – Borealid

Trả lời

15
SELECT CASE 
      WHEN Type = 0 THEN Val0 
      WHEN Type = 1 Then Val1 
      . 
      . 
      WHEN Type = N Then ValN 
     END 
    FROM tbl 
+0

Điều này dường như có một vấn đề mặc dù nếu bạn đang sử dụng một bảng từ cơ sở dữ liệu khác, vì rõ ràng Sql Server sau đó áp đặt một số lượng tối đa các trường hợp 10 ... đó là khá nhỏ. – eidylon

3

Con đường tôi đọc điều này, bạn cần phải sử dụng UNION:

SELECT a.val0 
    FROM TABLE a 
WHERE a.type = 0 
UNION ALL 
SELECT a.val1 
    FROM TABLE a 
WHERE a.type = 1 
UNION ALL ... 

UNION ALL không loại bỏ bản sao, và nhanh hơn UNION (vì nó loại bỏ bản sao).

Thực hiện thao tác này là có thể.

+0

Tôi giải thích nó là "trả lại cho tôi một giá trị duy nhất dựa trên loại đã cho". Nhưng bạn có thể hoàn toàn đúng. Nó là tốt để yêu cầu cho một sản lượng dự kiến ​​:). – dcp

+0

@ dcp: Tôi đã bị cắn quá nhiều lần các giả định không chính xác của mình - tôi hỏi và chờ trong khi xem để xem liệu có hợp lý với bất kỳ ai khác không. –

2

Đối với giá trị thấp của N, bạn có thể làm điều đó ad-hoc bằng cách sử dụng CASE statement, như CASE Type WHEN 0 THEN Val0 WHEN 1 THEN Val1 END. Nếu N của bạn lớn hơn, có lẽ bạn nên chuẩn hóa cơ sở dữ liệu của mình (ví dụ: đặt ID => ánh xạ ValN trong một bảng khác).

+0

Tuyên bố CASE hoạt động tốt. Đề xuất chuẩn hóa là tốt, nhưng không phải lúc nào cũng có thể, khi bạn đang tích hợp với cơ sở dữ liệu elses của ai đó. Không may. – eidylon

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