2015-04-29 6 views
0

Я написал код sql в среде mysql для согласования данных. Но я не смог получить правильный результат, и я смущаюсь о том, что не так с моим кодом sql. мой код sql выглядит следующим образом:group_concat в mysql с условиями «case when»

SELECT case when cc.complex_check_id = cmt.comp_o_id then cc.status cstatus,sgk.status sgstatus,cc.NAME complex_check_name,cc.min min_flag,cmt.comp_t_name cmpt_name,group_concat(concat(concat(concat(concat(concat(f.NAME, ';') , sgk.NAME),' ') ,cc.operator),' ')) 
else cc.status cstatus,sgk.status sgstatus,cc.NAME complex_check_name,cc.min min_flag,'not' as cmpt_name,group_concat(concat(concat(concat(concat(concat(f.NAME, ';') , sgk.NAME),' ') ,cc.operator),' ')) end res_string 
FROM complex_check_anag cc,lnksinglechecktocomplexcheck lk,single_check_anag sgk,functionalci f ,lnkconfigurationitemtosinglecheck lkcg,comp_t_anag cmt 
WHERE cc.complex_check_id = lk.complex_check_id AND sgk.single_check_id = lk.single_check_id and f.id = lkcg.config_item_id 
and sgk.single_check_id = lkcg.single_check_id and sgk.status = 'active' GROUP BY cc.NAME 

не могли бы вы дать мне несколько предложений, пожалуйста? ... большое спасибо вам всем!

+1

«Я не мог получить правильный результат», не очень описательный. – Cthulhu

+0

Прошу прощения, я имею в виду, что при выполнении запроса появляется сообщение об ошибке. –

+0

Это ближе, но еще две вещи: каково было сообщение об ошибке, и что было бы правильным результатом (чего вы пытаетесь достичь) , Пожалуйста, поместите их в вопрос. – Cthulhu

ответ

0

Синтаксис, который вы использовали для выражения CASE, неверен, вы можете выбрать только одно выражение внутри выражения case, но вы выбрали более одного столбца, и я заметил, что только один столбец необходимо выбрать на основе случая состояние, поэтому я переместил все столбцы из выражения случая, за исключением той колонки, как это:

SELECT 
    cc.status cstatus, 
    sgk.status sgstatus, 
    cc.NAME complex_check_name, 
    cc.min min_flag, 
    group_concat(concat(concat(concat(concat(concat(f.NAME, ';') , sgk.NAME),' ') ,cc.operator),' ')), 
    case when cc.complex_check_id = cmt.comp_o_id then cmt.comp_t_name 
               else 'not' as 
               end res_string 
FROM complex_check_anag cc .... 
.... the rest of your query here 

Кроме того, вы можете переписать запрос с использованием INNER JOIN вместо старого join синтаксиса, как это:

SELECT 
    cc.status cstatus, 
    sgk.status sgstatus, 
    cc.NAME complex_check_name, 
    cc.min min_flag, 
    group_concat(concat(concat(concat(concat(concat(f.NAME, ';') , sgk.NAME),' ') ,cc.operator),' ')), 
    case when cc.complex_check_id = cmt.comp_o_id then cmt.comp_t_name 
               else 'not' as 
               end res_string 
FROM complex_check_anag cc, comp_t_anag cmt 
INNER JOIN lnksinglechecktocomplexcheck lk ON cc.complex_check_id = lk.complex_check_id 
INNER JOIN functionalci f ON f.id = lkcg.config_item_id 
INNER JOIN lnkconfigurationitemtosinglecheck lkcg ON sgk.single_check_id = lk.single_check_id 
INNER JOIN single_check_anag sgk ON sgk.single_check_id = lkcg.single_check_id 
WHERE sgk.status = 'active' 
GROUP BY cc.NAME 

Обратите внимание, что вы не указали какое-либо условие между двумя таблицами complex_check_anag cc, comp_t_anag cmt, так что вы получите декартовое произведение между двумя таблицами, и оно может не дать вам правильных данных. Поэтому проверьте связь между этими двумя таблицами и добавьте правильный тип соединения между ними, чтобы получить правильные данные, которые вы ищете.

+0

Большое спасибо за ваши предложения. Я пробовал запросы bothe, но он не работает, появляется сообщение об ошибке рядом с условием «case when». Я сбиваю с толку использование «case when» с «Group_cancat». Большое спасибо ! –

+0

@AnwarAhmad - Извините, это моя вина, я забыл ',' перед тем случаем, когда попробуйте мой обновленный запрос. –

+0

Да, вы правы. он работает сейчас. Большое спасибо, Хороший день! –

1
select group_concat(concat(case when ProStatus='A' then round(proQnty) else 0 end,':',prodtmappid) separator',') as result from tblproductmapforlisting where 
prodtmappid in (329607,329606,329605,329604) order by FIELD(prodtmappid,329607,329606,329605,329604) 
+1

Ответ должен объяснить, как он решает проблему и почему. – Alex

+0

Хотя этот код может помочь решить проблему, предоставляет дополнительный контекст относительно _why_ и/или _how_ it Ответы на вопрос значительно улучшат его долгосрочную стоимость . Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение . –

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