Sql 如何将列合计为一行
我有一个SQL查询:Sql 如何将列合计为一行,sql,sql-server,vb.net,sql-server-2008,Sql,Sql Server,Vb.net,Sql Server 2008,我有一个SQL查询: Select Location, net_sales, total_visits, Avg_money_per_visit from Daily_Sales where day = @day Group By Location 它在VB.NET中运行并存储在数据表中,然后我将其转换为HTML并作为电子邮件正文发送 输出 Location Net_Sales Total Visits AVG Money Per Visit 1
Select Location, net_sales, total_visits, Avg_money_per_visit
from Daily_Sales
where day = @day
Group By Location
它在VB.NET中运行并存储在数据表中,然后我将其转换为HTML并作为电子邮件正文发送
输出
Location Net_Sales Total Visits AVG Money Per Visit
1 100 5 20
2 50 2 25
3 200 2 100
我希望输出结果与总计一致:
Location Net_Sales Total Visits AVG Money Per Visit
1 100 5 20
2 50 2 25
3 200 2 100
Total: 350 9 38.89
在转换为HTML之前,如何获取SQL或datatable中的sum列
下面是我如何转换为HTML的:
Public Function DataTableToHTMLTable(ByVal inTable As DataTable) As String
Dim dString As New StringBuilder
dString.Append("<table border=""1"" cellpadding=""0"" cellspacing=""0"">")
dString.Append(GetHeader(inTable))
dString.Append(GetBody(inTable))
dString.Append("</table>")
Return dString.ToString
End Function
Private Function GetHeader(ByVal dTable As DataTable) As String
Dim dString As New StringBuilder
dString.Append("<thead><tr>")
For Each dColumn As DataColumn In dTable.Columns
dString.AppendFormat("<th>{0}</th>", dColumn.ColumnName)
Next
dString.Append("</tr></thead>")
Return dString.ToString
End Function
Private Function GetBody(ByVal dTable As DataTable) As String
Dim dString As New StringBuilder
dString.Append("<tbody>")
For Each dRow As DataRow In dTable.Rows
dString.Append("<tr>")
For dCount As Integer = 0 To dTable.Columns.Count - 1
dString.AppendFormat("<td td align='center'>{0}</td>", dRow(dCount))
Next
dString.Append("</tr>")
Next
dString.Append("</tbody>")
Return dString.ToString()
End Function
您可以通过在组中使用WITH ROLLUP。此外,您还可以在其中加入一个分组来标记总数
Select
CASE WHEN GROUPING(Location) = 1 THEN 'Total' ELSE CAST(location AS VARCHAR(2)) END AS location
, SUM(net_sales) AS net_sales
, SUM(total_visits) AS total_visits
, CAST(AVG(Avg_money_per_visit) AS DECIMAL(10,2)) AS avg_money_per_visit
from Daily_Sales
where day = @day
Group By Location WITH ROLLUP
假设“Location”是一个varchar字段,您可以将total字段附加到基本查询中,以从数据库本身返回总和:
--<<Original Query>>
UNION ALL
SELECT
'Total:'
, sum(net_sales)
, sum(total_visits)
, sum(Avg_money_per_visit)
from
Daily_Sales
在不使用GROUP BY的情况下,将所有查询合并到同一个查询。这不需要我将其余的select列添加到GROUP BY子句中吗?至少看起来是这样me@Shmewnix不,但是如果你想精确计算平均货币的话,十进制是行不通的。这将是:CASTROUNDCASTSUMavg_money_per_Visition作为数字10,2/COUNTavg_money_per_Visition,2作为数字10,2作为avg_money_per_Visition。平均数是:48.33而不是48。有些人可能想要一分钱:有趣——谢谢,我会试试的。另一个问题-如果执行由子查询组成的查询,这种情况会发生什么变化?汇总是否仍然与此相同?