Asp.net 在sql中编写分组查询(MS Access)

Asp.net 在sql中编写分组查询(MS Access),asp.net,sql,ms-access,Asp.net,Sql,Ms Access,我有两张表,项目和发票。数据库是MS Access mdb 项目表包含多个字段 投射 项目名称 项目状态 发票表包含以下字段: 发票ID 投影外键 已支付和已接收的发票类型 发票渠道编码、设计和咨询 发票金额 项目表与项目ID为外键的发票表具有一对多关系 我希望通过查询发票表创建一个表,如下所示 如何使用SQL查询实现这一点? 或者我必须使用服务器端编码吗?我在ASP.NET中使用C您发布的表架构没有包含总和的字段。我将其称为金额 首先,创建一个交叉表查询,并将其保存在我称之为ct的数据库中:

我有两张表,项目和发票。数据库是MS Access mdb

项目表包含多个字段

投射 项目名称 项目状态 发票表包含以下字段:

发票ID 投影外键 已支付和已接收的发票类型 发票渠道编码、设计和咨询 发票金额 项目表与项目ID为外键的发票表具有一对多关系

我希望通过查询发票表创建一个表,如下所示

如何使用SQL查询实现这一点?
或者我必须使用服务器端编码吗?我在ASP.NET中使用C

您发布的表架构没有包含总和的字段。我将其称为金额

首先,创建一个交叉表查询,并将其保存在我称之为ct的数据库中:

这将为您提供ProjectID和InvoiceType作为前两列,另外两列分别用于编码、设计和咨询

要获取总数,您需要另一个查询:

SELECT ct.*, Coding + Designing + Consulting AS Total
FROM ct;
请记住,如果没有特定ProjectID/InvoiceType/InvoiceChannel的记录,查询将为该组合返回NULL,这将导致总计为NULL。如果这个查询将在Access下运行,比如说通过Access.Application,你可以使用Nz函数,它的工作原理与??C中的运算符:

SELECT ct.*, Nz(Coding,0) + Nz(Designing,0) + Nz(Consulting,0) AS Total
FROM ct;
如果使用OleDbProvider通过ADO.NET访问.mdb或.accdb中的数据,则可能无法使用Nz,并且必须使用更复杂的工具:

SELECT ct.*, 
    Iif(IsNull(Coding), 0, Coding) +
    Iif(IsNull(Designing), 0, Designing) + 
    Iif(IsNull(Consulting), 0, Consulting) AS Total
FROM ct;

很抱歉我已经更新了问题。另外,我不需要交叉表查询。我只关心查询单表发票。我会试试你的方法,让你知道。谢谢…如果不使用交叉表查询,您将如何从发票表中获取所需格式的数据?让我们假设我拥有所有项目ID,我希望从中获得发票计数。两个表的mdbsHi ZevSpitz格式不同。回答很好,但是您不需要另一个查询来获得交叉表中的总计,您还可以将value字段作为行标题进行求和。例如:将SumTable1.ANumber转换为SumOfNumber选择Table1.AText2,将SumTable1.ANumber转换为Table1 GROUP中的总计,然后按Table1.AText2 PIVOT Table1.AText;
SELECT ct.*, 
    Iif(IsNull(Coding), 0, Coding) +
    Iif(IsNull(Designing), 0, Designing) + 
    Iif(IsNull(Consulting), 0, Consulting) AS Total
FROM ct;