2008-11-13 30 views
14

Tôi muốn thực hiện một (MS) truy vấn SQL trả về một cái gì đó như thế này:SQL inline nếu loại tuyên bố câu hỏi

Col1 Col2     Col3 
---- --------------------- ------ 
AAA 18.92     18.92 
BBB 20.00     40.00 
AAA 30.84     30.84 
BBB 06.00     12.00 
AAA 30.84     30.84 
AAA 46.79     46.79 
AAA 86.40     86.40 

nơi Col3 bằng col2 khi col1 = AAA và Col3 là hai lần col2 khi Col1 = BBB. Ai đó có thể chỉ cho tôi theo chiều hướng nghiêm ngặt không?

+1

Tôi biết đây là câu hỏi cũ, nhưng bây giờ chúng ta có SQL Server 2012 có thể sử dụng 'IIF' http://stackoverflow.com/a/23991354 – jahu

Trả lời

32

Bạn không đề cập đến loại cơ sở dữ liệu bạn đang sử dụng. Dưới đây là một cái gì đó sẽ làm việc trong SQL Server:

SELECT Col1, Col2, 
    CASE WHEN Col1='AAA' THEN Col2 WHEN Col1='BBB' THEN Col2*2 ELSE NULL END AS Col3 
FROM ... 
+0

Ooh: đã không nghĩ về điều đó giải thích câu hỏi. Tôi nghĩ anh ta đang yêu cầu một mệnh đề phức tạp. Sẽ rất thú vị khi thấy anh ta sử dụng cái gì. –

+0

Tôi nghĩ anh ấy muốn lọc các bản ghi. –

1
select * 
from yourtable 
where (Col3 = col2 AND Col1 = 'AAA') OR 
    (Col3 = (2*Col2) AND Col1='BBB') 
+0

Ooh: không nghĩ đến việc giải thích câu hỏi đó. Tôi nghĩ anh ta đang yêu cầu một cột tính toán. Nó sẽ được quan tâm để xem mà ông sử dụng. –

2

Nó phụ thuộc vào hương vị của bạn của SQL. Case/Khi làm việc với SQL Server (và có thể là những người khác).

Select Col1, Col2, 
     Case When Col1 = 'AAA' Then Col2 Else Col2 * 2 End As Col3 
From YourTable 
0

Đôi khi các giá trị là null, để họ có thể bị xử lý như thế này:

select Address1 + (case when Address2='' then '' else ', '+Address2 end) +    
    (case when Address3='' then '' else ', '+ Address3 end) as FullAddress from users 
7

Bạn cũng có thể sử dụng ISNULL hoặc COALESCE các chức năng như vậy, nên các giá trị được null:

SELECT ISNULL(Col1, 'AAA') AS Col1, 
     ISNULL(Col2, 0) AS Col2, 
     CASE WHEN ISNULL(Col1, 'AAA') = 'BBB' THEN ISNULL(Col2, 0) * 2 
      ELSE ISNULL(Col2) 
     END AS Col3 
FROM Tablename