我正在尝试更新 Microsoft 报告。它的作用是写出有多少客户被排除在转换过程之外以及原因。目前,该程序将所有已删除的客户端写回到服务器,然后查询它以将结果填充到特殊表中。
这是当前的查询:
SELECT DeletedClients.Reason,
COUNT(DeletedClients.Reason) AS Number,
CAST(CAST(COUNT(DeletedClients.Reason) AS float)
/ CAST(t.Total AS float)
* 100 AS numeric(4, 1)) AS percentage
FROM DeletedClients CROSS JOIN
(SELECT COUNT(*) AS Total
FROM DeletedClients AS DeletedClients_1
WHERE (ClinicID = @ClinicID)) AS t
WHERE (DeletedClients.ClinicID = @ClinicID)
AND (DeletedClients.TotalsIdent = @ident)
GROUP BY DeletedClients.Reason, t.Total
ORDER BY Number DESC
我想做的不是写DeletedClients
到服务器,因为它已经作为数据表存在于我的程序内存中,它只是减慢了报告速度并用我们不需要保存的信息填充数据库。
我的主要问题是:
如何查询数据表以在内存中创建一个新的数据表,该数据表的结果与我写出 SQL Server 并使用上面的查询将其读回的结果相同?
OR
在 Microsoft Reports 中,如何对 Tablix 中的项目执行 group by 子句以进行翻转=Fields!Reason.Value
=Fields!Number.Value
=Fields!percentage.Value
类似于上面查询返回的结果?
您可以使用DataTable.Select 来查询DataTable。
DataTable table = GetDataTableResults();
DataTable results = table.Select("SomeIntColumn > 0").CopyToDataTable();
或者对于更复杂的查询,可以使用 LINQ 来查询 DataTable:
DataTable dt = GetDataTableResults();
var results = from row in dt.AsEnumerable()
group row by new { SomeIDColumn = row.Field<int>("SomeIDColumn") } into rowgroup
select new
{
SomeID = rowgroup.Key.SomeIDColumn,
SomeTotal = rowgroup.Sum(r => r.Field<decimal>("SomeDecimalColumn"))
};
DataTable queryResults = new DataTable();
foreach (var result in query)
queryResults.Rows.Add(new object[] { result.SomeID, result.SomeTotal });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)