2013-04-22 42 views
5

Cố gắng tạo cột được tính toán sẽ có giá trị dựa trên giá trị trong bốn cột khác. Cột 1, Coulmn 2, cột 3, cột 4 có thể là Có hoặc Không Kết quả cuối cùng trong cột tính toán, chúng ta hãy nói tên Progress, nên được một cái gì đó dọc theo dòng này:Tuyên bố trường hợp SQL để tăng giá trị

Progress = CASE 
WHEN [Column1] = 'Yes' THEN Value+1 
WHEN [Column2] = 'Yes' THEN Value+1 
WHEN [Column3] = 'Yes' THEN Value+1 
WHEN [Column4] = 'Yes' THEN Value+1 
ELSE 0 END 

Hy vọng điều này có ý nghĩa rõ ràng là cú pháp cho điều trên không đúng.

+0

để bạn muốn tổng của 'Có trong các cột đó? – cmd

+3

Vui lòng cung cấp dữ liệu mẫu và kết quả để làm rõ những gì bạn thực sự muốn. –

+0

RDBMS của bạn (hương vị SQL) là gì? Có MS SQL Server không? –

Trả lời

5

Có vẻ như đây là những gì bạn đang làm.

Progress = 
CASE WHEN [Column1] = 'Yes' THEN 1 ELSE 0 END + 
CASE WHEN [Column2] = 'Yes' THEN 1 ELSE 0 END + 
CASE WHEN [Column3] = 'Yes' THEN 1 ELSE 0 END + 
CASE WHEN [Column4] = 'Yes' THEN 1 ELSE 0 END 

Điều này sẽ trả về 0 + 1 cho mỗi "Có".

+0

Đã hoạt động! Cảm ơn đã phản ứng kịp thời. Đã lưu cho tôi một loạt các tình tiết tăng nặng và thời gian :-) – user1886816

+0

@ user1886816 Không sao cả. Mẹo hay là luôn cố gắng để bao bọc một và chỉ một giá trị trong một câu lệnh CASE đơn. 4 cột = 4 trường hợp. –

1

Trong SQL Server:

SELECT * 
FROM mytable 
CROSS APPLY 
     (
     SELECT COALESCE(SUM(CASE val WHEN 'yes' THEN 1 END), 0) 
     FROM (VALUES (NULL)) q(v) 
     UNPIVOT 
       (
       val FOR col IN 
       (column1, column2, column3, column4) 
       ) c 
     ) q (progress) 

Xem SQLFiddle.

+0

Thật tuyệt vời! Cảm ơn, nhưng điều đó đã đi ngay phía trên đầu tôi :-( – user1886816

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