복붙노트

[SQL] MySQL은 Case 문

SQL

MySQL은 Case 문

나는 다음과 같은 정의를 'tbl_transaction'라는 데이터베이스 테이블을 가지고 :

id INT(11) Primary Key
action_type ENUM('Expense', 'Income')
action_heading VARCHAR (255)
action_amount FLOAT

소득 AMT 사의과 비용 AMT 사의 : 나는 두 개의 열을 생성하고 싶습니다.

이 사용 조건에 열을 채울 수 있나요 만 SQL 쿼리 등이 올바른 열의 출력이 나타납니다, 그것이 비용 항목 또는 소득 항목이 있는지 여부에 따라?

예를 들면 :

ID        Heading         Income Amt       Expense Amt
1         ABC             1000             -
2         XYZ             -                2000

나는 데이터베이스로 MySQL을 사용하고 있습니다. 나는이 작업을 수행하기 위해 CASE 문을 사용하려고 해요.

건배!

해결법

  1. ==============================

    1.예,이 같은 :

    예,이 같은 :

    SELECT
        id,
        action_heading,
        CASE
            WHEN action_type = 'Income' THEN action_amount
            ELSE NULL
        END AS income_amt,
        CASE
            WHEN action_type = 'Expense' THEN action_amount
            ELSE NULL
        END AS expense_amt
    
    FROM tbl_transaction;
    

    다른 답변이 지적한 것처럼, MySQL은 또한 구문 자세한 적게 사용하여이 작업을 수행 할 수있는 IF () 함수를 가지고있다. 나는 일반적으로 그것은 일반적으로 다른 곳에서 지원되지 않는 SQL에 대한 MySQL의 특정 확장이기 때문에이를 방지하려고합니다. CASE는 표준 SQL과 다른 데이터베이스 엔진을 통해 더 많은 휴대용, 나는 휴대용 대안이 상당히 느린 이하 편리 경우에만 엔진 특정 확장자를 사용하여 가능한 한 많은 휴대용 쿼리를 작성하는 것을 선호합니다.

  2. ==============================

    2.MySQL은 또한) (IF가 있습니다 :

    MySQL은 또한) (IF가 있습니다 :

    SELECT 
      id, action_heading, 
          IF(action_type='Income',action_amount,0) income, 
          IF(action_type='Expense', action_amount, 0) expense
    FROM tbl_transaction
    
  3. ==============================

    3.IF를 사용하는 것을 시도하십시오 (조건, 값 1, 값)

    IF를 사용하는 것을 시도하십시오 (조건, 값 1, 값)

    SELECT ID, HEADING, 
    IF(action_type='Income',action_amount,0) as Income,
    IF(action_type='Expense',action_amount,0) as Expense
    
  4. ==============================

    4.이 작업을해야합니다 :

    이 작업을해야합니다 :

    select 
      id
      ,action_heading
      ,case when action_type='Income' then action_amount else 0 end
      ,case when action_type='Expense' then expense_amount else 0 end
    from tbl_transaction
    
  5. ==============================

    5.@cdhowie 다른 사람들이 여기에 (무엇을 설명처럼 하나 여기에 문서화 : 명심해야 할 또 다른 것은이 MySQL의 두 가지 경우가있다 http://dev.mysql.com/doc/refman/5.7/en/control-flow -functions.html # operator_case)와 CASE라고하지만, 완전히 다른 문법과 완전히 다른 기능을 가지고 뭔가, 여기에 설명 : https://dev.mysql.com/doc/refman/5.0/en/case.html

    @cdhowie 다른 사람들이 여기에 (무엇을 설명처럼 하나 여기에 문서화 : 명심해야 할 또 다른 것은이 MySQL의 두 가지 경우가있다 http://dev.mysql.com/doc/refman/5.7/en/control-flow -functions.html # operator_case)와 CASE라고하지만, 완전히 다른 문법과 완전히 다른 기능을 가지고 뭔가, 여기에 설명 : https://dev.mysql.com/doc/refman/5.0/en/case.html

    내가 다른 할 때 변함없이, 내가 먼저 하나를 사용하십시오.

  6. ==============================

    6.나는 이것이 적합한 솔루션을 제공 할 것입니다 희망 :

    나는 이것이 적합한 솔루션을 제공 할 것입니다 희망 :

    통사론:

       CASE  
            WHEN search_condition THEN statement_list  
           [WHEN search_condition THEN statement_list]....
           [ELSE statement_list]  
       END CASE
    

    이행:

    select id, action_heading,  
       case when
                 action_type="Expense" then action_amount  
                 else NULL   
                 end as Expense_amt,   
        case when  
                 action_type ="Income" then action_amount  
                 else NULL  
                 end as Income_amt  
      from tbl_transaction;
    

    그것보다 경우 - 당시 다른 더 유연 여기에 내가 CASE 문을 사용하고 있습니다. 그것은 더 한 지점보다 수 있습니다. 그리고 CASE 문은 대부분의 데이터베이스 표준 SQL과 작품입니다.

  7. from https://stackoverflow.com/questions/15265874/case-statement-in-mysql by cc-by-sa and MIT license