sql - 我刚开始学习SQL,但无法进行查询,您能帮帮我吗?
问题描述
sql查询中有一个字段我做不到。首先,必须在下表中添加一个新列。此列的值需要是完成百分比,所以它是一个百分比值。例如,Cupboard=1 架子上有 7 个值。IsCounted 在这里,其中 3 个被计算在内。换句话说,Cupboard = 1 的那些应该将 3/7 的百分比值写为要创建的新列中的值。如果其他人的 IsCounted 为 0,它将写入 0%。我怎样才能做到这一点?
我的 Sql 代码:
SELECT a.RegionName,
a.Cupboard,
a.Shelf,
(CASE WHEN ToplamSayım > 0 THEN 1 ELSE 0 END) AS IsCounted
FROM (SELECT p.RegionName,
r.Shelf,
r.Cupboard,
(SELECT COUNT(*)
FROM FAZIKI.dbo.PM_ProductCountingNew
WHERE RegionCupboardShelfTypeId = r.Id) AS ToplamSayım
FROM FAZIKI.dbo.DF_PMRegionType p
JOIN FAZIKI.dbo.DF_PMRegionCupboardShelfType r ON p.Id = r.RegionTypeId
WHERE p.WarehouseId = 45) a
ORDER BY a.RegionName;
结果如下图所示:
解决方案
看起来窗口AVG
应该可以解决问题,尽管尚不完全清楚分区列应该是什么。
SELECT COUNT
可以简化为EXISTS
SELECT a.RegionName,
a.Cupboard,
a.Shelf,
a.IsCounted,
AVG(a.IsCounted * 1.0) OVER (PARTITION BY a.RegionName, a.Cupboard) Percentage
FROM (
SELECT p.RegionName,
r.Shelf,
r.Cupboard,
CASE WHEN EXISTS (SELECT 1
FROM FAZIKI.dbo.PM_ProductCountingNew pcn
WHERE pcn.RegionCupboardShelfTypeId = r.Id
) THEN 1 ELSE 0 END AS IsCounted
FROM FAZIKI.dbo.DF_PMRegionType p
JOIN FAZIKI.dbo.DF_PMRegionCupboardShelfType r ON p.Id = r.RegionTypeId
WHERE p.WarehouseId = 45
) a
ORDER BY a.RegionName;
推荐阅读
- wordpress - Wordpress - 自定义字段 - 如何打印“断线”
- vba - 如何在运行宏后保留选定的表格单元格?
- git - Git“祖先参考”
- c++ - 如果参数是位域,则禁用模板函数
- python - ImportError:没有名为“flask”的模块 python3 ubuntu 16.04
- javascript - JS 正则表达式匹配两种可能的组合
- c# - 下载和缓存离线数据(图像/视频/3d 模型)的代码架构应该是什么?
- haskell - 在 Haskell 中实例化 Num 类
- amazon-web-services - 如果我使用 COPY 命令将数据从 S3 加载到 Redshift,它会遵循我的 dist 样式和键吗?
- sql-server - Azure Sql 表分区性能