【问题标题】:Difference between two columns, choice of columns varies when more data is added两列之间的差异,当添加更多数据时,列的选择会有所不同
【发布时间】:2017-12-15 22:17:10
【问题描述】:

我有下表可供访问:

ID Week
1   Wk1
1   Wk2
3   Wk2
3   Wk3

我构建了一个查询,将表格分布在几周内。交叉表如下所示:

ID  Wk1  Wk2  Wk3
1   1     1    0
3   0     1    1

我想创建一列来获取最后两列之间的差异。像这样的:

ID  Wk1  Wk2  Wk3  Diff
1   1     1    0   -1
3   0     1    1    0

此列应该是可变的。也就是说,当我在更多周(例如 Wk4、Wk5 等)获得更多数据时,变量列应该反映过去两周之间的差异。最好的方法是什么?

谢谢!

【问题讨论】:

标签: sql ms-access


【解决方案1】:

如果您对 VBA 解决方案持开放态度,那么以下是我如何解决您想要的输出的方法。 基本上,它对带有列和查询的表进行操作以执行所需的计算字段。

这个概念是每次你运行一个函数或一个子函数时构建一个查询 sql - 这取决于你。

因此,它首先构建一个获取每个字段的查询,然后在最后添加 CALC 字段,该字段减去表的最后一个和倒数第二个字段的值。

Public Function func3(table_or_query As String)

Dim db As Database
Set db = CurrentDb()
Dim Ccount As Integer
Dim name As String
Dim name_last As String
Dim name_last_min_1 As String
Dim quera As QueryDef
Set quera = db.QueryDefs("kw_test_stack1") ' - name of query to be replaced


strSql1 = "SELECT "

Ccount = db.TableDefs(table_or_query).Fields.Count '- for tables 
'Ccount = db.QueryDefs("YourQueryName").Fields.Count - for queries

For i = 1 To Ccount - 1 ' - here you start building a new sql for each of fields in desired table
name = db.TableDefs(table_or_query).Fields(i).name
name = table_or_query & "." & name
strSql1 = strSql1 & name & ", "
Next i

name_last = db.TableDefs(table_or_query).Fields(Ccount - 1).name ' - here you get names of last and second to last columns
name_last = table_or_query & "." & name_last
name_last_min_1 = db.TableDefs(table_or_query).Fields(Ccount - 2).name
name_last_min_1 = table_or_query & "." & name_last_min_1

strSql1 = strSql1 & name_last & " - " & name_last_min_1 & " as Calc FROM " & table_or_query &";" ' - finishing building of a query
quera.SQL = strSql1 ' - update of the query

func3 = name_last & " , " & pos1 & " , " & strSql1  ' - ommit i used it for a testing purpose

End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-07
    • 2013-05-02
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多