MySQL选择查询 - 根据日期对数据进行排序

时间:2012-01-09 14:51:26

标签: c# asp.net mysql

我正在使用MySQL。 这是表名item_supplier

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

我希望有人可以帮我这个或者给我一个提示。

2 个答案:

答案 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和supplier_ID排序,因此循环结果然后以您想要的格式输出很简单。

答案 1 :(得分:0)

我的第一个SQL不支持Crosstab / Pivot Query。因此,您需要为列创建动态临时表,然后将记录插入其中。 首先,您必须在一个游标中获取所有日期,然后根据日期的Cursor创建临时表并插入列。在创建表后,创建另一个用于插入行的游标。并获取每一行并更新临时表。我也用这种方式完成了这个.... 如果您有任何疑问,请联系。