2015-07-07 2 views
0

Я создаю запрос, в котором я бы посчитал, сколько наград у заявителя. До сих пор у меня есть это:MySQL Сумма и случай

SELECT 
CASE WHEN Award1 IS NOT NULL THEN 1 ELSE 0 END + 
CASE WHEN Award2 IS NOT NULL THEN 1 ELSE 0 END + 
CASE WHEN Award3 IS NOT NULL THEN 1 ELSE 0 END + 
CASE WHEN Award4 IS NOT NULL THEN 1 ELSE 0 END 
as summedColumn 
FROM resume, person 
where E_Status = 'Applicant' 
and person.ID_No like 'x' and resume.ID_No like 'x' 

Table:Person       Values 
ID_No(Varchar, Primary)    x 
F_Name(Varchar)      Fasa 
L_Name(Varchar)      Bel 
M_Name(Varchar)      Drake 
Resume_ID(Varchar)     res01 

Table: Resume      Value 
Resume_ID(Varchar, Primary)   res01 
ID_No(Varchar)      x 
Award1(Varchar)      Suma Cum Laude 
Award2(Varchar)      null 
Award3(Varchar)      null 
Award4(Varchar)      null 
Past_Position1(Varchar)    HR manager 
Past_Position2(Varchar)    null 

Output of the query: 4 

Когда я побежал код он вернул значение 4, но мой Award2, Award3 и Award4 все нуль. Код предполагает, чтобы вернуть значение 1.

Вот вид таблицы:

+0

вы не имеете присоединиться пункт в запросе. –

+0

Есть ли причина, почему у вас есть несколько столбцов «Награда»? Как выглядит структура базы данных? –

+0

Опубликовать вывод «select * FROM resume, person где E_Status =« Заявитель »и person.ID_Не нравится« x »и resume.ID_Не нравится« x », чтобы мы могли видеть фактические данные. –

ответ

0

Может быть, вы хотите пересмотреть свою структуру базы данных. Как насчет создания структуры 1: n?

Структура таблицы Person: ID, Name ...

Структура таблицы AwardRel: PersonID, AwardRel

Таблица Структура Награды: ID, AwardName, ...

С 1: п структуры, как это, ваш запрос может быть выражен как:

SELECT COUNT(*) FROM `AwardRel` WHERE `PersonID` = 1; 

Этот запрос должен возвращать любое количество наград, которые человек 1 когда-либо получал.

2

Вы не присоединились к вашим двум таблицам, поэтому он делает перекрестное соединение между таблицами Resume и Person.

Найти ключ, который относится к Person резюме, и приравнивает их вместе:

SELECT 
CASE WHEN Award1 IS NOT NULL THEN 1 ELSE 0 END + 
CASE WHEN Award2 IS NOT NULL THEN 1 ELSE 0 END + 
CASE WHEN Award3 IS NOT NULL THEN 1 ELSE 0 END + 
CASE WHEN Award4 IS NOT NULL THEN 1 ELSE 0 END 
as summedColumn 
FROM resume 
    INNER JOIN person 
     ON resume.Resume_ID = person.Resume_ID 
where E_Status = 'Applicant' 
and person.ID_No like 'x' and resume.ID_No like 'x' 
+0

Пробовал, то, что я сделал, было resume.Resume_ID = person.Resume_ID во внутреннем соединении, все же результаты, где то же самое. – user3797088

+0

Это должно сделать это, это сработало? –

+0

К сожалению, результаты были одинаковыми – user3797088

Смежные вопросы