在开发用于存储公司数据的数据库时,我犯了错误地构造一些Access表的错误。
数据来自各种模型,因此我需要重组旧的“人工”表(每个提议都有一个劳动表),以便将来可以检索任何数据。
我是SQL的新手。我尝试了几种不同的方式(APPEND,ALTER ... ADD COLUMN等)。我认为SELECT ... INTO是目前的解决方法,但我仍然无法完全正确。
在旧表结构中,第一个字段是“句点”。所有记录在每个期间都会重新出现一次。每个期间的LCAT,公司和薪金字段完全相同。唯一的一个随周期变化的值是右2列。
我需要通过将第一天之后的每个时间段的小时数和DLRate值复制到新列中来重新构造它们(并重命名Hours / DLRates列。我已经包括了到目前为止的内容。
提前谢谢!
| Period LCAT Company Salary Hours DLRate |
|-----------------------------------------|
| 1 LCAT1 Comp1 77000 1723 $37.02|
| 1 LCAT2 Comp1 81000 1723 $38.94|
| 1 LCAT3 Comp2 81000 1723 $50.00|
| 2 LCAT1 Comp1 77000 1800 $38.02|
| 2 LCAT2 Comp1 81000 1800 $39.94|
| 2 LCAT3 Comp2 81000 1800 $51.00|
Option Compare Database
Option Explicit
Sub RedoTables()
Dim sTbl As String
Dim sSQL As String
Dim sTemp As String
Dim intA As Long, intB As Long
Dim arrCols() As String: arrCols() = Split("Hours,DLRate", ",")
sTbl = "Labor"
For intB = 1 To 2
`enter code here`For intA = LBound(arrCols) To UBound(arrCols)
sTemp = "(SELECT " & arrCols(intA) & " FROM [" & sTbl & "] " _
& "WHERE Period = " & intB & ") " _
& "AS P" & intB & "_" & arrCols(intA)
Debug.Print sTemp
sSQL = sSQL & sTemp
If intA < UBound(arrCols) Or intB < 1 Then sSQL = sSQL & ", "
Next
Next
sSQL = "SELECT" & sSQL & " " _
& "INTO [" & sTbl & "test] " _
& "FROM [" & sTbl & "]; "
DoCmd.RunSQL sSQL
End Sub
执行SQL时,出现一条错误,指出“此子查询最多可以返回一条记录”。...