【发布时间】:2022-01-12 19:12:35
【问题描述】:
我想要一个显示刷新日期的摘要行,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;
【问题讨论】:
-
你研究过
rollup吗? -
您要在同一个表中存储常规行和汇总行?
-
旁注,不要使用单引号 (
') 作为别名。单引号用于文字字符串,而不是分隔标识对象名称。一些为别名使用单引号的方法已被弃用,仅在您定义它们时才有效,在其他地方无效;ORDER BY 'Quantity'将不会按别名为'Quantity'的列排序。坚持使用不需要分隔标识的对象和别名,如果您必须分隔标识它们,请使用 T-SQL 标识符、方括号 ([]) 或 ANSI-SQL 的双引号 ("). -
考虑到上面所有的
FORMAT调用,看起来您正在尝试在 SQL 层中完成表示/报告层的工作。也许您最好在表示层中进行总计和格式化(当然应该是格式化) -
@Austin yes 进入 inudstryExposure 表
标签: sql sql-server tsql