2017-04-09 17 views
3

私は2つのテーブルusersuserdetailを持っています。次のSQLクエリでselect caseを使用する方法

CREATE VIEW `new` AS 
SELECT 
users.id AS id, 
userdetail.healthissues AS healthissues, 
users.fullName AS fullname, 
userdetail.`status`, 

CASE status 
WHEN userdetail.status ='1' THEN userdetail.`status`= 'Blocked' 
     WHEN userdetail.status= '0' THEN userdetail.`status` ='Active' 
    END , 

users.phoneNumber AS number 
FROM users 
JOIN userdetail ON users.id = userdetail.reference 

このコードは、望ましい結果が得られていない:私はuserdetailカラムのステータスが1であれば、それはビューでActiveを示さなければならないし、ステータスが0の場合はブロックされているビューを作成しようとしています。いくつか私にこれを手伝ってもらえますか?

CREATE VIEW `new` AS 
    SELECT u.id AS id, ud.healthissues AS healthissues, u.fullName, 
      ud.status as orig_status, 
      (CASE WHEN ud.status = 1 THEN 'Blocked' 
       WHEN ud.status = 0 THEN 'Active' 
      END) as status, 
      u.phoneNumber AS number 
    FROM users u JOIN 
     userdetail ud 
     ON u.id = ud.reference; 

注:

+0

を選択する。..値を割り当てることはできませんか?たとえば、userdetail.status = '1'の場合、返されるものは?userdetail.status 'のような値を変更しようとしていますか?) – jarlh

答えて

1

私はこれが何をしたいの正しい構文だと思いますが、状況だけでなく、文字列を選択したい場合は

  • 私はわからないんだけど、あなたはあなたの質問にそれを持っています。
  • caseの正しい構文では、=の後にthen節を使用しません(ブール値を返さない限り)。
  • テーブルのエイリアスを使用すると、クエリの書き込みと読み取りが容易になります。
  • Newは、ビューの悪い名前です。予約されていませんが、それはキーワードです。
+0

'NEW'はANSI/ISO SQLに従って予約されています。 (SQL-99以降より) – jarlh

+0

ステータスを文字列としてのみ選択したい –

0

あなただけの何をしようとする

CREATE VIEW `new` AS 
SELECT 
users.id AS id, 
userdetail.healthissues AS healthissues, 
users.fullName AS fullname, 
userdetail.`status`, 
    CASE status 
    WHEN userdetail.status ='1' THEN 'Blocked' 
      WHEN userdetail.status= '0' THEN 'Active' 
     END as my_eval_status, 
users.phoneNumber AS number 
FROM users 
JOIN userdetail ON users.id = userdetail.reference 
関連する問題