MySQL выбрать, чтобы вернуть пробелы для всех, кроме первой строки повторяющегося столбца - PullRequest
2 голосов
/ 14 апреля 2011

Можно ли создать mysql select (напрямую или с помощью хранимой процедуры), который будет возвращать пробелы для повторяющихся столбцов. Например, select, который обычно возвращает эти 7 записей с двумя столбцами:

Bob   123
Bob   557
Bob   888
Joe   887
Joe   223
Tom   899
Tom   999

Я бы предпочел видеть это непосредственно из SQL выбора:

Bob   123
      557
      888
Joe   887
      223
Tom   899
      999

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

Ответы [ 5 ]

3 голосов
/ 15 апреля 2011

Следующее должно работать, но оно не возвращает результаты в порядке, который вы использовали в своем примере.

SELECT  IF(n.ID = nm.ID, n.Name, NULL)
        , n.ID
FROM    Names n
        INNER JOIN (
          SELECT  Name
                  , ID = MIN(ID)
          FROM    Names        
          GROUP BY
                  Name
        ) nm ON nm.Name = n.Name
ORDER BY
        n.Name
        , n.ID
2 голосов
/ 15 апреля 2011

Да, это возможно, но это будет очень дорого (подзапросы!) И совсем не эффективно. Какой бы язык вы ни использовали или каким бы образом вы ни передавали эти данные напрямую, не стоит, чтобы SQL сэкономил эти несколько байтов.

1 голос
/ 15 мая 2013

Для MySQL (я думаю, что это должно быть аналогично для других БД), чтобы избежать повторения значения столбца в каждой строке, вы можете эффективно использовать переменные.Никаких подзапросов не требуется: легко и быстро.

//Init a variable
SET @previous:="";

//Remember previous row value
SELECT IF(Name=@previous, "", @previous:=Name) AS GroupedName, Value
FROM tableName ORDER BY 1;
1 голос
/ 15 апреля 2011

Кажется, что было бы огромной тратой ресурсов не сделать это через ваше приложение, но один из способов сделать это - использовать PL / SQL в хранимой процедуре или что-то подобноезаполнить какую-то временную таблицу.При этом вы можете объявить переменную, если имя равно фамилии, которая была повторена.Поэтому, если имя является новым, добавьте его во временную таблицу, в противном случае - нет.

Опять же, это огромная трата ресурсов

0 голосов
/ 14 ноября 2017

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

SELECT IF(name=@previous, "", @previous:=name) as name_, value
FROM (SELECT @previous:= '') AS temp, tableName
ORDER BY name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...