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

本文关键字:数据 排序 日期 选择 查询 -根 MySQL | 更新日期: 2023-09-27 18:19:46

我使用的是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

我需要一个select查询来显示一个类似这样的表。

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

我希望有人能帮我或者给我一个提示。

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

如果事先不知道有限数量的日期,那么您就无法在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进行排序,因此很容易循环查看结果,然后按所需格式输出。

First of My SQL不支持交叉表/数据透视查询。所以您需要为列创建动态临时表,然后将记录插入其中。比如,首先您必须在一个游标中获取所有日期,然后创建临时表并根据日期的游标插入列。创建表后,创建另一个光标以插入行。并获取每一行并更新临时表。我也用这种方式做到了。。。。如果您有任何疑问,请联系。