mridulkoul123 Ответов: 1

Процедура Mysql, показывающая только 10 столбцов после преобразования строк в столбцы


For example:

Name  | 1stjan   | 2ndjan   | 3rdjan   | 4thjan
jenny | present  | absent   | present  | present
clark | absent   | present  | present  | present

Original tables - emp_details 

id | emp_id |   Name 
1  | 51     |  jenny
2  | 52     |  clark
Original tables - emp_attendance

 id | emp_id   | status       |    Date 
  1 |    51    |   present    |  2017/01/02    
  2 |    52    |   present    |  2017/01/02   


Что я уже пробовал:

Я попробовал это сделать, и он работает нормально, но после 10 столбцов ... он выдает ошибку синтаксиса mysql

DELIMITER $$
    DROP PROCEDURE IF EXISTS `attendance_reg`.`new2` $$
CREATE PROCEDURE new2 (IN ddl1 varchar(100))
BEGIN
SET @sql = NULL;
SET @vardomain := CONCAT(ddl1,'%');
    select GROUP_CONCAT(DISTINCT
               CONCAT(' Max(CASE WHEN DATE_FORMAT(b.time_in, ''%D %M'') = ''',
                       DATE_FORMAT(time_in, '%D %M'),
                       ''' THEN b.status END) AS ''',
                       DATE_FORMAT(time_in, '%D %M'), ''''
                     )
                  ORDER BY time_in)
                  INTO @sql
    from emp_attendance   where time_in like @vardomain;
    SET @sql = CONCAT('SELECT b.emp_id ,a.emp_name ,', @sql, ' from emp_details a  join emp_attendance b  on b.emp_id=a.emp_id  and b.time_in like ',@vardomain,' Group By a.emp_name order by a.emp_dept,a.emp_name');
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    END $$

DELIMITER ;

Afzaal Ahmad Zeeshan

Ну и что? Где находится HTML-контент для представлений? Данные, похоже, работают нормально (на случай, если возникнут проблемы, которых я не видел). Кроме того, разве вам не нужно было бы присоединиться к столам, а не просто выбирать их?

mridulkoul123

прямо сейчас вид такой:

Наименование | код emp_id| статус | дата
Дженни / 51 / настоящее время | 1stjan
clark / 52 / present | 2ndjan

И я хочу этого, как:

Имя / 1stjan | 2ndjan | 3rdjan | 4thjan
Дженни / присутствует / отсутствует / присутствует / присутствует
Кларк / отсутствует / присутствует / присутствует / присутствует

Afzaal Ahmad Zeeshan

Хорошо, тогда вам нужно транспонировать строки в зависимости от даты. В ASP.NET, вы можете сделать это, используя группировку данных на основе имени, а также даты записей.

mridulkoul123

можете ли вы показать это на примере

anup.bhunia

эта статья может вам помочь
https://www.codeproject.com/Articles/44274/Transpose-a-DataTable-using-C

1 Ответов

Рейтинг:
11

mridulkoul123

Я решил это сам.... проблема была в длине моего GROUP_CONCAT
я поставил его на 1000000...

SET SESSION GROUP_CONCAT_max_len = 1000000;