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中单独执行您想要的操作。
你最好的选择是得到一张这样的桌子:
+---------+------------+-------------+-------------+
| 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不支持交叉表/数据透视查询。所以您需要为列创建动态临时表,然后将记录插入其中。比如,首先您必须在一个游标中获取所有日期,然后创建临时表并根据日期的游标插入列。创建表后,创建另一个光标以插入行。并获取每一行并更新临时表。我也用这种方式做到了。。。。如果您有任何疑问,请联系。