Вывести данные из БД поменяв местами

235
12 июня 2018, 18:50

Имеется SQL запрос который отдает:

ID_CLIENT | FIO            | DATA_ZAKAZ | COL_VO
-----------------------------------------------
1         | Петров Сергей  | 2018-04-12 | 4
2         | Антонов Виктор | 2018-04-12 | 2
2         | Антонов Виктор | 2018-04-09 | 1

Как в PHP сделать так, чтобы появилась таблица:

Фамилия ИО     | 2018-04-12 | 2018-04-09
Петров Сергей  | 4 заказа   | 0 заказов
Антонов Виктор | 2 заказа   | 1 заказ

т.е. сделать, чтобы ФИО не повторялось, а распределялось по датам?

SQL может отдавать одинаковую дату например как(2018-04-12): Но разных клиентов.

Как сделать вывод в таком виде: вывод чтобы был в таком виде:

Фамилия ИО     | 2018-04-12 | 2018-04-09
Петров Сергей  | 4 заказа   | 0 заказов
Антонов Виктор | 2 заказа   | 1 заказ 
Answer 1

Как для примера с использованием динамического скрипта (без PIVOT)

-- Первоначальная база
create table #DATA (
  ID_CLIENT  int          not null,
  FIO        varchar(255) not null,
  DATA_ZAKAZ date         not null,
  COL_VO     int          not null default 0
);
-- Добавляем данные
insert into #DATA
values (1, 'FIO 1', '2018-04-12', 4),
       (2, 'FIO 2', '2018-04-12', 2),
       (2, 'FIO 2', '2018-04-09', 1)
;
-- Выдибраем уникальные даты и проставлям порядковый номер
select distinct
       DATA_ZAKAZ,
       dense_rank() over(order by DATA_ZAKAZ desc) as "NUM"
  into #DATES
  from #DATA
 order by 1 desc
;
-- временные парметры для динамического скрипта
declare @num int = 1,                    -- для цикла
        @qty_dates int = 0,              -- кол-во дат в выборке
        @date varchar(255),              -- дата как строка (для цикла)
        @scr varchar(max) = 'select FIO' -- скрипт
;
-- узнаём кол-во дат
select @qty_dates = count(*)
  from #DATES
;
-- Перебираем все даты из таблицы и создаём динамический скрипт
while (@num <= @qty_dates)
begin
    select @date = replace(convert(varchar, DATA_ZAKAZ, 102), '.', '-')
      from #DATES
     where NUM = @num
    select @scr = concat(@scr, ',isnull(sum(case when DATA_ZAKAZ = ''', @date, ''' then COL_VO end),0) as "', @date , '"')
    select @num = @num + 1
end
-- Добавляем концовку в скрипт
select @scr = concat(@scr, ' from #DATA group by FIO');
-- выполняем скрипт
execute (@scr)
READ ALSO
Не записываются задания в лист задач

Не записываются задания в лист задач

есть лист задача на PHP + phpMyAdmin, по коду всё вроде правильно, не выбивает никакой ошибки, но не задания не добавляются в сам лист и БДВот код,...

296
Push - оповещения на сайт

Push - оповещения на сайт

Более теоретический вопросХочу сделать на сайте так, чтобы при получении нового личного сообщения сразу же приходило оповещение в браузер...

194
Не работает связь belongsTo() laravel

Не работает связь belongsTo() laravel

Подскажите, я ищу конкретную запись в laravel: Information::where("url",$url)->first(); (связь belongsTo) И пытаюсь таким образом обратиться к родтаблице:

183
Как поменять местами в каталоге?

Как поменять местами в каталоге?

Как поменять местами в каталоге символ и цену, чтобы символ был после цены? Это не в карточке товара, а в общем каталоге

182