[英]Convert text string to Decimal or currency type for ms-access query in C#?
[英]Writing a grouping query in sql ( MS-Access )
我有两个表项目和发票。 数据库是 MS Access ( mdb )
项目表有字段
发票表有字段
Projects 表与 Invoices 表是一对多的关系,其中项目 ID 作为外键。
我想要一个通过查询 Invoices 表创建的表
如何使用 SQL 查询实现此目的?
或者我是否必须使用服务器端编码来完成(我将 C# 与 ASP.NET 一起使用)
您发布的表架构没有包含要求和的金额的字段。 我将其称为Amount
。
首先,创建一个交叉表查询,并将其保存在数据库中(我称之为ct
):
TRANSFORM Sum(Amount) AS SumOfAmount
SELECT ProjectID, InvoiceType
FROM Invoices
GROUP BY ProjectID, InvoiceType
PIVOT InvoiceChannel In ("Coding","Designing","Consulting");
这将为您提供ProjectID
和InvoiceType
作为前两列,每个附加列分别用于“编码”、“设计”和“咨询”。
要获得总数,您需要另一个查询:
SELECT ct.*, Coding + Designing + Consulting AS Total
FROM ct;
请记住,如果没有特定ProjectID
/ InvoiceType
/ InvoiceChannel
,则查询将为该组合返回NULL
,这将导致Total
为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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.