2

很抱歉再次打扰你们。我已经在互联网上搜索了所有内容,但找不到解决问题的方法。我在Access中有两个表,输出是这样的:

数学 5
英语 3
英语 2
物理 5
数学 1
数学 3

我希望它是:

数学 5、1、3
英语 3, 2
物理 5

我怎样才能做到这一点?它尝试在 Access 数据库中使用 SQL 命令,但没有任何效果。我还在 ASP.NET 中寻找使用 GridView 的解决方案,但也没有运气。有没有办法实现这一点,还是我应该采取不同的方法?

我能做的最好的就是 GROUP BY 所以输出看起来像这样:

数学 5
数学 3
数学 1
物理 3
物理 1
...
4

4 回答 4

2

有一个简单的解决方案。在查询中使用last()聚合函数。

样本:

SELECT RecNo, Last(fConcat([RecNo],[Field5])) AS Field5 FROM myTable GROUP BY RecNo; 

函数 Last() 为将被分组的每条记录调用函数 Concat。请注意使用在函数 Concat 之外定义的全局变量。

以下只是一个简单的代码作为概念证明:

Option Compare Database

Dim glbWert1 As Variant, glbWert2 As Variant

Public Function fConcat(strWert1, strWert2) As Variant

  If strWert1 <> glbWert1 Then
    glbWert1 = strWert1
    glbWert2 = strWert2
  Else
    glbWert2 = glbWert2 + "; " + strWert2
  End If

  fConcat= glbWert2

End Function

该解决方案工作得非常快

于 2012-05-15T16:02:12.157 回答
2

我相信你正在寻找这样的东西 -

将对象集合加入逗号分隔的字符串

我倾向于像您在问题中的 GROUP BY 中所做的那样将数据拉回,然后在您的 asp.net 代码中连接每个主题的数值。

或者您可以编写一个 VBA 函数以在 Access 中使用来执行此操作。Allen Browne 在这里已经写过一篇。您只需将代码添加到 Access 中的模块,然后您就可以在 Access 中的 SQL 查询中使用该函数。

鉴于此表结构

subjects table 

id  |  SubjectName  |    Grade
---------------------------------
1      MATH            5
2      ENGLISH         3
3      ENGLISH         2
4      PHYSICS         5
5      MATH            1
6      MATH            3

以下带有 VBA 函数的 SQL

SELECT 
    subjects.SubjectName + ' ' + 
    ConcatRelated("Grade","subjects","SubjectName='" & SubjectName & "'") AS result
FROM 
    subjects
GROUP BY
    subjects.SubjectName

产生以下结果

result
------------
ENGLISH 3, 2
MATH 5, 1, 3
PHYSICS 5

如果您想获得您在问题中指定的顺序,您将需要另一个字段/表达式来进行排序

于 2009-07-07T22:36:25.790 回答
0

如果我有 MS Access 和 ASP.Net 来解决这个任务,我会采用嵌套中继器的路线。

所以我会对数据库进行两次调用,第一次调用以获取不同的类别(在您的情况下 -- IDSUBJECTS),第二次调用是获取所有 IDSUBJECTS 的所有 GRADE 字段。如果您通过用户名进行操作,那么我会将用户名添加到每个调用中。

然后我将一个中继器绑定到不同的 IDSUBJECTS,将一个文字控件和一个中继器放入itemtemplate. 然后我会从文字控件中获取文本以及对Repeater_ItemDataBound事件中内部转发器的引用,并根据外部转发器中的 IDSUBJECT 过滤第二个表。在内部中继器中,遍历过滤后的数据并以您想要的方式显示。

不是最简单的解决方案,但它可以工作。

如果您有 SQL Server(您可以免费下载 Microsoft SQL Server Express),您可能需要查看该PIVOT功能。

于 2009-07-07T22:04:41.140 回答
-1

如果可以选择 Microsoft SQL Server,则一种非常有趣的处理方法是使用公用表表达式查询。使用 CTE 将允许您按班级将成绩列连接到单个单元格中。Simple-Talk 有一个很好的演练,解释了 SQL 连接的不同方法,并给出了使用 CTE 的示例(查找 WITH 语句)。

如果您没有 Microsoft SQL Server,请下载Microsoft SQL Server 2008 Express

于 2009-07-07T22:22:38.860 回答