gpt4 book ai didi

excel - 报告连接到值的行和列名称 (Microsoft Access)

转载 作者:行者123 更新时间:2023-12-04 20:18:20 24 4
gpt4 key购买 nike

由于我不怎么使用数据库,所以我对此一无所知。我希望通过在其他网站上帮助人们使用 InDesign 和 Photoshop 来支付它就足够了!

我可以使用 Access 或 Excel 进行以下操作。

我的数据看起来像:

年 会长 副会长
1980 年里根老布什
1984 年里根老布什
1988 年老布什奎尔
1992 年克林顿·戈尔
1996 年克林顿·戈尔
2000 年小布什切尼
2004 小布什切尼
2008年奥巴马拜登
2012年奥巴马拜登

我想要一份看起来像这样的报告:

拜登:副总统 2008、2012
小布什:2000 年、2004 年总统
老布什:1988 年总统;副 1980, 1984
切尼:副 2000, 2004
克林顿:1992年总统,1996年
戈尔:副1992、1996
奥巴马:2008 年、2012 年总统
奎尔:副 1988
里根:1980 年、1984 年总统

我无法弄清楚如何识别可能出现在表格上任何位置的通用名称,以及如何获取报告的行和列标签。

这是真实数据的简化版本,与政客无关。实际上有十个相关的列标签,而不仅仅是两个。 “老布什”给出了一个人担任两个不同职位的例子。

目前没有任何情况下相同的名称出现在同一行的两个不同列中,但我不希望排除这种可能性,除非允许这样做要复杂得多。

谢谢!

最佳答案

我们需要做的第一件事是通过 UNION 查询将数据从“少行多列”转换为“少列多行”。 (我将您的测试数据保存在一个名为 [N_column_table] 的表中。)

SELECT [year], "President" AS office, [President] AS person
FROM [N_column_table]
UNION ALL
SELECT [year], "Vice" AS office, [Vice] AS person
FROM [N_column_table]

如果将该查询保存为“3_column_data”,那么您可以像在其他查询、报告等中使用表一样使用它。(当您为真实数据构建查询时,您必须再添加约 8 个 UNION ALL 构造。 )

所以现在我们的数据看起来像这样
year    office      person
1980 President Reagan
1984 President Reagan
1988 President Bush Sr.
1992 President Clinton
1996 President Clinton
2000 President Bush Jr.
2004 President Bush Jr.
2008 President Obama
2012 President Obama
1980 Vice Bush Sr.
1984 Vice Bush Sr.
1988 Vice Quayle
1992 Vice Gore
1996 Vice Gore
2000 Vice Cheney
2004 Vice Cheney
2008 Vice Biden
2012 Vice Biden

现在,至于将办公室和年份“粘合在一起”,我们需要为此使用一点 VBA 函数。在 Access 中创建一个模块,并粘贴以下代码
Public Function ListTerms(person As String) As String
Dim cdb As DAO.Database
Dim rstOffice As DAO.Recordset, rstYear As DAO.Recordset
Dim result As String, yearString As String

Const YearSeparator = ", "
Const OfficeSeparator = "; "

Set cdb = CurrentDb
result = ""

Set rstOffice = cdb.OpenRecordset( _
"SELECT DISTINCT office " & _
"FROM 3_column_data " & _
"WHERE person=""" & Replace(person, """", """""", 1, -1, vbBinaryCompare) & """ " & _
"ORDER BY 1")
Do While Not rstOffice.EOF
yearString = ""
Set rstYear = cdb.OpenRecordset( _
"SELECT DISTINCT [year] " & _
"FROM 3_column_data " & _
"WHERE person=""" & Replace(person, """", """""", 1, -1, vbBinaryCompare) & """ " & _
"AND office=""" & Replace(rstOffice!Office, """", """""", 1, -1, vbBinaryCompare) & """ " & _
"ORDER BY 1")
Do While Not rstYear.EOF
If Len(yearString) > 0 Then
yearString = yearString & YearSeparator
End If
yearString = yearString & rstYear!Year
rstYear.MoveNext
Loop
rstYear.Close
Set rstYear = Nothing
If Len(result) > 0 Then
result = result & OfficeSeparator
End If
result = result & rstOffice!Office & " " & yearString
rstOffice.MoveNext
Loop
rstOffice.Close
Set rstOffice = Nothing
Set cdb = Nothing
ListTerms = result
End Function

现在我们可以在查询中使用该函数来列出每个人及其在办公室的任期
SELECT personlist.[person], ListTerms(personlist.[Person]) as terms
FROM (SELECT DISTINCT person FROM 3_column_data) personlist

返回
person      terms
Biden Vice 2008, 2012
Bush Jr. President 2000, 2004
Bush Sr. President 1988; Vice 1980, 1984
Cheney Vice 2000, 2004
Clinton President 1992, 1996
Gore Vice 1992, 1996
Obama President 2008, 2012
Quayle Vice 1988
Reagan President 1980, 1984

关于excel - 报告连接到值的行和列名称 (Microsoft Access),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15843181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com