代表MySQL中的票价图表

时间:2012-07-21 08:27:14

标签: mysql sql database excel pivot-table

我正在为公共汽车运输系统预订系统。我很难将Fare表表示为MySQL中的表。下面附上了作为电子表格文档提供给我的一条特定路线的票价表的示例。请告诉我这是如何表示为MySQL表的。

请注意,这只是其中一条指定路线的一部分。实际路线有40多个地点,有30多条这样的路线。所以,我希望以某种方式将这个excel表导出为SQL。

location1   |           |           |           |
0.100       | location2 |           |           |    
0.200       | 0.200     |location3  |           |
0.300       | 0.300     |0.200      |location4  |           
0.500       | 0.500     |0.400      |0.300      |location5  |       
0.500       | 0.500     |0.400      |0.300      |0.200      |location6

这里从location1到位置3的票价为0.200,从location3到location6的票价为0.400。

请告诉我如何查询MySQL表格的源和目标形式的费率。

2 个答案:

答案 0 :(得分:3)

就像:

RATES
location_from
location_to
price

抬头看:

SELECT price FROM rates WHERE location_from=3 AND location_to=4

将返回:0.400

始终输入最低的一个location_form,所以永远不要添加4,3。然后你会得到双重记录。

但根据您的需要,您还可以使用距离并计算它们。完全取决于您的业务需求。

答案 1 :(得分:0)

我设法在Excel中使用以下VB宏将其转换为一个表,其中一些文本处理转换为MySQL查询以将其插入数据库

Sub ReversePivotTable()
'   Before running this, make sure you have a summary table with column headers.
'   The output table will have three columns.
    Dim SummaryTable As Range, OutputRange As Range
    Dim OutRow As Long
    Dim r As Long, c As Long

    On Error Resume Next
    Set SummaryTable = ActiveCell.CurrentRegion
    If SummaryTable.Count = 1 Or SummaryTable.Rows.Count < 3 Then
        MsgBox "Select a cell within the summary table.", vbCritical
        Exit Sub
    End If
    SummaryTable.Select
    Set OutputRange = Application.InputBox(prompt:="Select a cell for the 3-column output", Type:=8)
'   Convert the range
    OutRow = 2
    Application.ScreenUpdating = False
    OutputRange.Range("A1:C3") = Array("To", "From", "Fare")
    For r = 2 To SummaryTable.Rows.Count
        For c = 2 To SummaryTable.Columns.Count
            If SummaryTable.Cells(r, c) <> Empty And IsNumeric(SummaryTable.Cells(r, c)) Then
                OutputRange.Cells(OutRow, 1) = SummaryTable.Cells(r, r)
                OutputRange.Cells(OutRow, 2) = SummaryTable.Cells(c, c)
                OutputRange.Cells(OutRow, 3) = SummaryTable.Cells(r, c)
                OutputRange.Cells(OutRow, 3).NumberFormat = SummaryTable.Cells(r, c).NumberFormat
                OutRow = OutRow + 1
            End If
        Next c
    Next r
End Sub

这将给我3列描述location_from,location_to和价格,如@ luc-franken描述的那样。我将其保存为CSV文件,并通过一些正则表达式替换将其转换为MySQL查询。