如何将表行分解为新列?

时间:2019-07-13 23:08:04

标签: sql access-vba

在开发用于存储公司数据的数据库时,我犯了错误地构造一些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时,出现一条错误,指出“此子查询最多可以返回一条记录”。...

0 个答案:

没有答案