2016-03-25 5 views
-1

Вот моя проблема. Я хотел бы найти дубликат «код НФЖ» и получить различные склады, где я получаю этот повторяющийся кодSQL-запрос для поиска дубликатов и получения других значений

Это как таблица выглядит следующим образом:

| code ifls | warehouse | 
| 4013 |  1 | 
| 4013 |  2 | 
| 4013 |  3 | 
| 4014 |  4 | 
| 4014 |  5 | 
| 4015 |  5 | 

Результат должен выглядеть следующим образом:

| code ifls | warehouse | warehouse | warehouse | 
| 4013 |  1  |  2  |  3  | 
| 4014 |  4  |  5  |   | 

Я попробовал эту просьбу, но без успеха ...

SELECT code ifls as ifls, (SELECT warehouse FROM catalogue WHERE code ifls= ifls) 
FROM catalogue GROUP BY code ifls HAVING COUNT(code ifls) > 1 

Как бы вы выразить Тхи s в SQL-запросе?

+0

http://stackoverflow.com/questions/36177816/combine-multiple-child-rows-into-one-row-mysql-without-hardcoding-or-min-max-val/36178292#36178292 –

+0

Вы можете ' t легко иметь такое динамическое количество столбцов. Установлено ли максимальное количество столбцов, или вы пытаетесь генерировать столбцы по мере необходимости? –

ответ

0

GROUP_CONCAT(), вероятно, самый простой способ сделать то, что вы пытаетесь сделать, не усложнять с помощью динамического колонны;

SELECT `code ifls`, GROUP_CONCAT(warehouse) warehouses 
FROM myTable 
GROUP BY `code ifls` 
HAVING COUNT(*) > 1 

An SQLfiddle to test with.

В основном он предоставляет список складов, разделенных запятыми, для каждого code ilfs, но HAVING ограничивает его рядами с более чем одним складом.

+1

Отлично! Это именно то, что мне нужно! Thx Joachim! – Guibrid

0

Вы можете использовать подзапрос и GROUP_CONCAT

select `code ifls`, group_concat(warehouse) 
from table 
where `code ifls` in (
    select `code ifls`, count(*) 
    from table 
    group by `code ifls` 
    having count(*) > 1 
) 
group by `code ifls` 
0

Вот ваш код-

SELECT `code ifls`, 
SUBSTRING_INDEX(GROUP_CONCAT(warehouse),',',1) AS warehouse_1, 
IF((LENGTH(GROUP_CONCAT(warehouse)) - LENGTH(GROUP_CONCAT(warehouse SEPARATOR ''))) < 1,'',SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(warehouse),',',2),',',-1)) AS warehouse_2, 
IF((LENGTH(GROUP_CONCAT(warehouse)) - LENGTH(GROUP_CONCAT(warehouse SEPARATOR ''))) < 2,'',SUBSTRING_INDEX(GROUP_CONCAT(warehouse),',',-1)) AS warehouse_3 
FROM `catalogue` 
GROUP BY `code ifls`;