2017-11-20 8 views
0

Node.js에 Sequelize ORM을 사용하면 select 문에서 CASE/WHEN 표현식을 어떻게 사용합니까?Sequelize에서 CASE WHEN 표현식을 사용하는 방법?

Sequelize Documentation에 따라 SQL 표현 CASE을 사용하는 참조 또는 예가 없습니다. 이것이 가능한가? 여기

내 예입니다 :

SQL

SELECT userId, Status, 
    MAX(CASE Type WHEN 'Employee' THEN Rate ELSE 0 END) AS "Employee", 
    MAX(CASE Type WHEN 'School' THEN Rate ELSE 0 END) AS "School", 
    MAX(CASE Type WHEN 'Public' THEN Rate ELSE 0 END) AS "Public", 
    MAX(CASE Type WHEN 'Other' THEN Rate ELSE 0 END) AS "Other" 
FROM Database.dbo.invoice 
WHERE Status IN ('Included', 'Excluded') 
GROUP BY userId, Status 

Sequelize

var query = { 
    attributes: ['userId'], // need to include Rate (as Employee, School, Public, Other for each CASE/WHEN) 
    /* 
    MAX(CASE Type WHEN 'Employee' THEN Rate ELSE 0 END) AS "Employee", 
    MAX(CASE Type WHEN 'School' THEN Rate ELSE 0 END) AS "School", 
    MAX(CASE Type WHEN 'Public' THEN Rate ELSE 0 END) AS "Public", 
    MAX(CASE Type WHEN 'Other' THEN Rate ELSE 0 END) AS "Other" 
*/ 
    where: { 
    user: userId, 
    Type: ['Employee', 'School', 'Public', 'Other'], 
    }, 
    group: ['userId'], 
    raw: true 
}; 
models.invoice.findAll(query).then(result => { 
    console.log(result); 
}); 

데이터베이스 구조

01 2,348,665,132,

원하는 결과 :

+--------+----------+--------+--------+-------+ 
| userId | Employee | School | Public | Other | 
+--------+----------+--------+--------+-------+ 
| 1  | 2.00  | 3.50 | 4.00 | 2.50 | 
+--------+----------+--------+--------+-------+ 
| 2  | 3.75  | 4.25 | 2.00 | 3.00 | 
+--------+----------+--------+--------+-------+ 

답변

1

당신은 특별한 쿼리

var query = { 
    attributes: [ 
    'userId', 
    [Sequelize.literal(`MAX(CASE Type WHEN 'Employee' THEN Rate ELSE 0 END)`), 'Employee'], 
    [Sequelize.literal(`MAX(CASE Type WHEN 'School' THEN Rate ELSE 0 END)`), 'School'], 
    [Sequelize.literal(`MAX(CASE Type WHEN 'Public' THEN Rate ELSE 0 END)`), 'Public'], 
    [Sequelize.literal(`MAX(CASE Type WHEN 'Other' THEN Rate ELSE 0 END)`), 'Other'], 
    ], 
    where: { 
    user: userId, 
    Type: ['Employee', 'School', 'Public', 'Other'], 
    }, 
    group: ['userId'], 
    raw: true 
}; 
models.invoice.findAll(query).then(result => { 
    console.log(result); 
}); 
을 구축 할 attributesSequelize.literal을 사용할 수 있습니다