2012-01-12 4 views
3

Я не мог придумать лучшего способа задать этот вопрос, но здесь идет:Объедините несколько строк в один MySQL Присоединиться

У меня есть 2 стола. Первая - таблица элементов для печати этикеток. Мы будем называть его pj_items Столбцы просто: job_id, part_num and qty

Вторая таблица представляет собой список отделки называется PartFinishes на части с помощью всего 2 столбцов: PartNumber and FinishId

Когда я хочу, чтобы получить информацию для печати этикеток I использование:
select pj_items.part_num, pj_items.qty, PartFinishes.FinishId from pj_items
join PartFinishes on PartFinishes.PartNumber = pj_items.part_num
where job_id = 1

Этот запрос работает отлично и дает мне правильный результат, когда каждая часть час как только один конец. Проблема в том, что на части есть 2 или более финиша.

Например: Часть 99401326 имеет 2 контуров. На моей таблице pj_items у меня есть одна строка для этой части, поэтому я могу напечатать одну метку. Когда я использую этот запрос, он возвращает 2 строки для этой части, каждый с другим FinishId К сожалению, это приведет к нанесению 2 ярлыков. Мне нужна обе эти финишировки в одной строке, так как мне нужен только один ярлык, напечатанный с обоими FinishId.

У меня был подобный запрос, который возвратил отделки в качестве новых столбцов (f1,f2,f3), но он все равно вернется 2 строки в данном примере с f1, определенной в первом ряду и f1 как нуль во втором ряду и f2 определяется в второй.

Как я могу получить это в одну строку?

Надеюсь, это имеет смысл, у кого есть предложения?

Если вам нужна дополнительная информация, то дайте мне знать.

Спасибо!

EDIT:

Таблица pj_items может иметь повторяющиеся записи, и мне нужно, чтобы сохранить их в качестве отдельных строк. Мне просто нужно иметь все отделки для каждой части в одной строке с соответствующей ее частью.

Пример
Ниже приведен пример таблицы pj_items:
pj_items table

Вот соответствующая информация из PartFinishes таблицы:
PartFinishes table

И вот результат, используя оригинал запрос:
results

Что мне нужно в результате, две строки из 99401326 - это одна с обеих концов в этой строке, при этом поддерживая две отдельные строки для 99401077, так как я хочу две метки этих.

ответ

2

Вы можете использовать GROUP_CONCAT для объединения всех финишных идентификаторов для данной части в один столбец.

SELECT pj_items.part_num, 
     pj_items.qty, 
     GROUP_CONCAT(PartFinishes.FinishId) as FinishIds 
FROM pj_items 
JOIN PartFinishes 
    ON PartFinishes.PartNumber = pj_items.part_num 
WHERE job_id = 1 
GROUP BY PartFinishes.PartNumber 

@comment: Однако, если вы хотите сохранить строки из pj_items отделенных вам нужно будет присоединиться PartFinishes уже сгруппированных по PARTNUMBER:

SELECT pj_items.part_num, 
    pj_items.qty, 
    FinishesGrouped.FinishIds 
FROM pj_items 
JOIN 
    (SELECT PartNumber, GROUP_CONCAT(FinishId) as FinishIds 
    FROM PartFinishes 
    GROUP BY PartNumber) FinishesGrouped 
ON 
    pj_items.part_num = FinishesGrouped.PartNumber 
+0

Это работает. Проблема тогда в том, что если я хочу напечатать несколько ярлыков одной части, у меня будет две или три строки в таблице pj_items той же части. Эти строки объединяются в один с одним и тем же концом несколько раз в столбце FinishIds. Вероятно, мне следовало бы добавить более конкретные вопросы к моему вопросу. Спасибо за ответ, хотя! –

+0

Отлично! Это работает отлично. Спасибо огромное! –

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