PDA

View Full Version : hỏi các bác về computed field



vuht2000
08-12-2010, 22:40
Tôi có một vấn đề thế này không biết bác nào đã gặp hoặc có cách giải quyết:
tôi có 13 trường kiểu int, tạm gọi là C1, C2...,C13. Mỗi trường chứa một trong bốn giá trị 0,1,2,3. Giờ tôi cần tạo một trường computed field kiểu bit, tạm gọi là CF, với yêu cầu như sau:
- nếu tồn tại một cặp (2,3) và không trường nào có 0 thì đặt CF=0. Else CF=1. Cặp (2,3) không cần theo thứ tự nào, miễn là tồn tại một trường=2 và 1 trường=3 là OK.

Cám ơn các bác

duc_dang87
08-12-2010, 23:34
Chào bạn, mình nghĩ sẽ phải sử dụng biểu thức boolean dài dài một chút nhưng rất dễ hiểu:
(C1 != 0 and C2 != 0 ... and C13 != 0) and (C1 == 2 || C2 == 2 || ... || C13 == 2) and (C1 == 3 || C2 == 3 || ... || C13 == 3)

Với SQL thì mình dùng cấu trúc IF ... ELSE để gán giá trị cho CF = 1 nếu biểu thức trên true, còn lại thì gán 0.

Bạn thấy thế nào?

vuht2000
08-12-2010, 23:45
cách của bạn rất tuyệt! Thế mà tôi chịu không nghĩ ra. Hay thật đấy. Sharing muôn năm :)

Red Devilic
09-12-2010, 19:22
Bác vuht nắm nhiều kiến thức cao siêu quá nên quên mất cách IF ELSE rồi

Mình còn 1 cách này nữa, xét về mặt ý tưởng thì giống cách của Duc_dang27 nhưng dùng LIKE, IF và Wildcards như sau

IF C1+C2+...+C13 LIKE '%[!0]%' and C1+C2+...+C13 LIKE '%[23]%

Được không nhỉ :)

vuht2000
09-12-2010, 21:04
ý tưởng của bác Red cũng hay lắm. Nhưng chắc cần phải đổi về kiểu chuỗi trước khi cộng.
Hì hì không phải là quên IF ELSE, lúc đầu cứ trung thành với yêu cầu quá định làm theo kiểu "tồn tại một cặp (2,3)" cần viết thành (C1=2 AND C2=3) OR (C1=3 AND C2=2) OR (C1=2 AND C3=3)... mới nghĩ viết thế này thì tiêu ;)

Red Devilic 1
09-12-2010, 21:37
@Bác Vũ

Ấy, em quên không để ý là kiểu int

Vậy thì càng đơn giản. Bác làm thế này nhé

C1*C2*...C13 > 0 ( để đảm bảo không có cột nào giá trị 0 )
AND C1*C2*...C13 mod 6 = 0 ( vì 2,3 là các số nguyên tố (Prime Number))

vuht2000
10-12-2010, 20:28
cái này cũng hay nữa. Bác Red, bác thực là một tài năng