[英]How to add a summary row at bottom of table
我想要一個顯示刷新日期的摘要行,Naics 代碼列中的空白,行業列中的“總計”標題,加權平均持續時間列的加權平均值,以及剩余每列的總和。
我曾嘗試使用 UNION ALL,但一直遇到問題。
SELECT DISTINCT
GETDATE() AS 'RefreshDate',
NaicsID AS 'NAICS Code',
NaicsName AS 'Industry',
FORMAT(SUM(RemainingTerm * BaseRent)/SUM(BaseRent), 'N1') AS 'Weighted Average Duration',
FORMAT(SUM(BaseRent), 'C0') AS 'Occupied Contract Rent',
FORMAT(SUM(BaseRent)/(SELECT SUM(BaseRent)
FROM dbo.data
WHERE NextSpaceLeaseID IS NULL), 'P1') AS '% of Commercial Total Rent',
FORMAT(SUM(SpaceLeaseArea), 'N0') AS 'Occupied SF',
FORMAT(SUM(SpaceLeaseArea)/(SELECT SUM(SpaceLeaseArea)
FROM dbo.data
WHERE NextSpaceLeaseID IS NULL), 'P1') AS '% of Commercial Total SF'
INTO
industryExposure
FROM
dbo.data
WHERE
NaicsID NOT LIKE '%[Legacy Lease]%'
AND NextSpaceLeaseID IS NULL
GROUP BY
NaicsID, NaicsName;
您可以為此使用GROUPING SETS
。 GROUPING()
function 告訴您列是否已分組。
進一步說明:
CROSS JOIN
。 條件聚合可能更快,但我把它留給了你。DISTINCT
,因為無論如何你都在分組。''
引用列名,而是使用[]
SELECT
GETDATE() AS RefreshDate,
d.NaicsID AS [NAICS Code],
CASE WHEN GROUPING(d.NaicsName) = 1 THEN 'Total' ELSE d.NaicsName END AS Industry,
FORMAT(SUM(d.RemainingTerm * d.BaseRent) / SUM(d.BaseRent), 'N1') AS [Weighted Average Duration],
FORMAT(SUM(d.BaseRent), 'C0') AS [Occupied Contract Rent],
FORMAT(SUM(d.BaseRent) / v.Total, 'P1') AS [% of Commercial Total Rent],
FORMAT(SUM(d.SpaceLeaseArea), 'N0') AS [Occupied SF],
FORMAT(SUM(d.SpaceLeaseArea) / v.Total, 'P1') AS [% of Commercial Total SF]
INTO
industryExposure
FROM
dbo.data d
CROSS JOIN (
SELECT SUM(d2.SpaceLeaseArea) AS Total
FROM dbo.data d2
WHERE d2.NextSpaceLeaseID IS NULL
) v
WHERE
d.NaicsID NOT LIKE '%[Legacy Lease]%'
AND d.NextSpaceLeaseID IS NULL
GROUP BY GROUPING SETS (
(d.NaicsID, d.NaicsName, v.Total),
()
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.