mysql 다중 - 'SELECT'문에서 'IF'-열 값을 기준으로 출력 값 선택




조건 여러개 (8)

SELECT id, amount FROM report

report.type='P' 이면 amount , report.type='N' 이면 -amount 필요합니다. 위의 쿼리에 어떻게 추가합니까?


Answers

case 문 사용 :

select id,
    case report.type
        when 'P' then amount
        when 'N' then -amount
    end as amount
from
    `report`

이 것을 시도해보십시오.

 SELECT
    id , IF(report.type = 'p', IFNULL(amount,0), IFNULL(amount,0) * -1) as amount
 FROM report

이것을 시도해 볼 수도 있습니다.

 Select id , IF(type=='p', IFNULL(amount,0), IFNULL(amount,0) * -1) as amount from table

select 
  id,
  case 
    when report_type = 'P' 
    then amount 
    when report_type = 'N' 
    then -amount 
    else null 
  end
from table

가장 간단한 방법은 IF() 를 사용하는 것입니다. 네, MySQL은 조건부 논리를 할 수 있습니다. IF 함수는 3 매개 변수 조건, 진실한 결과, 거짓 결과를 취합니다.

그래서 논리는

if report.type = 'p' 
    amount = amount 
else 
    amount = -1*amount 

SQL

SELECT 
    id, IF(report.type = 'P', abs(amount), -1*abs(amount)) as amount
FROM  report

no가 + ve 인 경우 abs ()를 건너 뛸 수 있습니다.


SELECT id, 
       IF(type = 'P', amount, amount * -1) as amount
FROM report

http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html 참조 http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html .

또한 조건이 null 인 경우 처리 할 수 ​​있습니다. 공제 금액의 경우 :

SELECT id, 
       IF(type = 'P', IFNULL(amount,0), IFNULL(amount,0) * -1) as amount
FROM report

IFNULL(amount,0) 부분 은 amount가 널이 아닌 경우를 의미합니다. 반환 값 else return 0 .


SELECT CompanyName, 
    CASE WHEN Country IN ('USA', 'Canada') THEN 'North America'
         WHEN Country = 'Brazil' THEN 'South America'
         ELSE 'Europe' END AS Continent
FROM Suppliers
ORDER BY CompanyName;

여러 테이블에서 삽입하는 방법은 다음과 같습니다. 이 특별한 예는 다 대다 시나리오의 매핑 테이블을 가지고있는 곳입니다 :

insert into StudentCourseMap (StudentId, CourseId) 
SELECT  Student.Id, Course.Id FROM Student, Course 
WHERE Student.Name = 'Paddy Murphy' AND Course.Name = 'Basket weaving for beginners'

(학생 이름에 일치하는 것이 하나 이상의 값을 반환 할 수 있지만 아이디어를 얻을 수 있습니다 .ID가 Identity 열이고 알 수없는 경우 Id 이외의 다른 항목과 일치해야합니다.)







mysql sql database