次の2つのテーブルがあります。
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
問題は、@ lastBrandがサブクエリに対してnullのままであるため、ブランドごとの小計金額を取得するサブクエリが常にNULLを返すことです(これが発生する理由の説明については、このスタックオーバーフローの質問を参照してください:再帰文字列内のサブクエリの理由連結は常にNULLを返しますか?)。
SQL Server 2005で小計を使用してHTMLテーブルを作成する別の方法を提案できますか?
ちなみに、データベースメールで送信するには、SQLServerでHTMLテーブルを作成する必要があります。
編集:新しいブランドグループが始まる前に小計行を描画する必要があるため、ケースを連結の終了から開始に移動しました。間違いでごめんなさい。