我有接下来的两张桌子:
CREATE TABLE #SalesByStore (
Brand VARCHAR(10),
StoreName VARCHAR(50),
Sales DECIMAL(10,2)
)
CREATE TABLE #SalesByBrand (
Brand VARCHAR(10),
TotalSales DECIMAL(10,2)
)
我正在尝试使用递归字符串连接构建一个 HTML 表体,我需要按品牌排序的商店显示销售额,并且在同一品牌的每组商店显示该品牌的销售额小计之后,如下所示:
我正在按照以下方式进行操作:
DECLARE @tableBody NVARCHAR(MAX), @lastBrand VARCHAR(10);
SELECT @tableBody='';
SELECT
@tableBody
= @tableBody
+ CASE
WHEN @lastBrand IS NOT NULL AND @lastBrand<>SS.Brand
THEN '<tr><td colspan="2">Subtotal</td><td>'
+ (SELECT TOP 1 CAST(SB.TotalSales AS VARCHAR(15)) FROM #SalesByBrand SB WHERE SB.Brand=@lastBrand)
+ '</td></tr>'
ELSE '' END
+ '<tr><td>' + SS.Brand + '</td><td>'
+ SS.StoreName + '</td><td>' + CAST(SS.Sales AS VARCHAR(15)) + '</td></tr>',
@lastBrand = SS.Brand
FROM #SalesByStore SS
ORDER BY SS.Brand
问题是按品牌获取小计金额的子查询始终返回 NULL,因为子查询的@lastBrand 仍然为空(请参阅此堆栈溢出问题以了解为什么会发生这种情况:Why subquery inside recursive string连接总是返回 NULL?)。
您能否建议我另一种在 SQL Server 2005 中创建带有小计的 HTML 表的方法?
顺便说一句,我需要在 SQL Server 中构建 HTML 表,以便在 db 邮件中发送它。
编辑:我已将案例从连接的结尾移至连接的开头,因为必须在新品牌组开始之前绘制小计行。对不起这个错误。