我正在使用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
我希望有人可以帮我这个或者给我一个提示。
答案 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创建临时表并插入列。在创建表后,创建另一个用于插入行的游标。并获取每一行并更新临时表。我也用这种方式完成了这个.... 如果您有任何疑问,请联系。