sql - 如何将以下一组查询的输出转换为 SQL Server 中的视图?
问题描述
我在 SQL Server 中有以下代码,我想要相同的输出但作为视图。如何编写视图以提供此输出?我想要第一个查询的结果以及每个占用 id 的不同人员 id 的计数,但我不能在该查询中使用 group by。
提前致谢!
SELECT DISTINCT
pp.PeopleID,
od.OccupancyID,
pp.Gender
INTO
t1
FROM
dimPeople AS pp
LEFT JOIN
OccupanciesPeople AS op ON op.PeopleID = pp.PeopleID
AND op.CompanyID = pp.CompanyID
LEFT JOIN
OccupancyDetail AS od ON op.OccupancyID = od.OccupancyID
AND op.CompanyID = od.CompanyID
WHERE
od.OccupancyEndDate IS NULL
AND op.DateLeftOccupancy IS NULL
AND pp.DateOfDeath IS NULL
SELECT
OccupancyID, COUNT(DISTINCT peopleID) AS PeopleCount
INTO
t2
FROM
t1
GROUP BY
OccupancyID
SELECT
t1.*,
t2.PeopleCount, t2.[HouseHold Person]
FROM
t1
JOIN
t2 ON t1.occupancyID = t2.OccupancyID
DROP TABLE t1
DROP TABLE t2
解决方案
如果这些查询以您想要的方式工作(剧透:它们没有 - 您t2.[HouseHold Person]
在创建 t2 时没有定义),您可以将 2 个“into”表替换为 Common Table Expressions 并获得结果。
CREATE VIEW dbo.MyView AS
WITH t1 AS (
SELECT DISTINCT
pp.PeopleID,
od.OccupancyID,
pp.Gender
FROM
dimPeople AS pp
LEFT JOIN
OccupanciesPeople AS op ON op.PeopleID = pp.PeopleID
AND op.CompanyID = pp.CompanyID
LEFT JOIN
OccupancyDetail AS od ON op.OccupancyID = od.OccupancyID
AND op.CompanyID = od.CompanyID
WHERE
od.OccupancyEndDate IS NULL
AND op.DateLeftOccupancy IS NULL
AND pp.DateOfDeath IS NULL
), t2 as (
SELECT
OccupancyID, COUNT(DISTINCT peopleID) AS PeopleCount
FROM
t1
GROUP BY
OccupancyID
)
SELECT
t1.PeopleID,
t1.OccupancyID,
t1.Gender,
t2.PeopleCount
FROM
t1
JOIN
t2 ON t1.occupancyID = t2.OccupancyID;
推荐阅读
- javascript - 在同一页面上多次搜索大型数组以查找特定条目的更好方法是什么?
- redis - Redis快照未将多个dump.rdb与maxlen属性合并
- django - 为什么 django 卡在加载不存在的模板上?
- reactjs - 在 React 中将函数从父类传递到子类中的函数
- mysql - MySQL 查询 - 数据未按预期显示,代码有问题
- php - 创建一个搜索算法,该算法在一个单独的数据库表中包含一些关键字,该数据库表链接到 Laravel 主表
- c# - 如何使用 Polly 根据响应内容重试 x 次,然后返回响应?
- ruby - Ruby - 如何找出一个数字是否在给定百分比容差的范围内?
- amazon-web-services - AWS S3:您尝试创建的存储桶数量超过了允许的数量
- python - Django Q Tasks - 将 Q_CLUSTER 放在设置文件之外