2012-01-09 4 views
0

Я использую MySQL. Это имя таблицы item_supplierMySQL Выберите запрос - Сортировка данных на основе даты

supplier_ID Item_ID Date     Price QTY 
1    1   2012-01-01 00:00:00 500.00 2 
1    1   2012-01-03 00:00:00 450.00 10 
2    1   2012-01-01 00:00:00 400.00 5 
3    1   2012-05-01 00:00:00 500.00 1 

мне нужен запрос на выборку, показывающую таблицу что-то вроде этого.

supplier_ID  2012-01-01 2012-01-03 2012-05-01 
1    500.00(2) 450.00(10) null 
2    400.00(5) null   null 
3    null   null   500.00(1) 

или, по крайней мере,

supplier_ID  2012-01-01 2012-01-03 2012-05-01 
1    500.00  450.00  null 
2    400.00  null   null 
3    null   null   500.00 

Я надеюсь, что кто-то может помочь мне в этом или дать мне подсказку.

+0

Возможный дубликат [матрицы/кросс-таблицы/запроса на основе pivot в mySQL] (http://stackoverflow.com/questions/3315234/matrix-crosstab-pivot-query-in-mysql) – Ryan

+0

Не получить ничего из требуемого набора результатов , Можете ли вы объяснить словами, что хотите? –

ответ

1

Если не существует конечного числа дат, которые известны заранее, то вы не можете делать то, что хотите, только в MySQL.

Лучше всего, чтобы получить таблицу, как:

+---------+------------+-------------+-------------+ 
| Item_ID | Date  | supplier_ID | price  | 
+---------+------------+-------------+-------------+ 
|  1 | 2012-01-01 |   1 | 500.00 (2) | 
|  1 | 2012-01-01 |   2 | 400.00 (5) | 
|  1 | 2012-01-03 |   1 | 450.00 (10) | 
|  1 | 2012-05-01 |   3 | 500.00 (1) | 
| ... | ...  |  ...  | ..... | 

Что можно сделать с:

SELECT Item_ID,Date,supplier_ID,CONCAT(FORMAT(Price,2),' (',QTY,')') AS price 
FROM item_supplier 
ORDER BY Item_ID,Date,supplier_ID; 

Тогда на C# стороне, цикл по результатам и распечатать нужный выход. Поскольку вывод теперь сортируется по Item_ID, Date, а затем по адресу vend_ID, это просто, чтобы просмотреть результаты, а затем вывести их в нужном формате.

+0

Я предполагаю, что я проиллюстрировал это не ясно. Есть число FINITE, которое известно заранее, для столбца и строки. Ваше предложение было очень полезно, но я надеюсь, что есть другой способ использовать MySQL. –

0

Первый из моих SQL не поддерживает запрос кросс-таблицы/Pivot. Поэтому вам нужно создать таблицу динамических темпов для столбцов, а затем вставить в нее запись. Вроде, сначала вам нужно получить всю дату в одном курсоре, а затем создать временную таблицу и вставить столбцы на основе курсора даты. После создания таблицы создайте другой курсор для вставки строк. и извлекать каждую строку и обновлять таблицу temp. Я также сделал это, используя этот способ .... Если у вас есть какие-либо вопросы, пожалуйста, свяжитесь с нами.

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