sql - 使用 SQL Server 中的查询在表中使用类似功能的复选框
问题描述
我有一个主表,其中包含多个名称记录,但数量和颜色不同。
TblPrimary : 当前表
id | name | color | Quan |
===+=========+=======+=======+
1 | Apple | Red | 10 |
2 | Banana | Yellow| 5 |
3 | Mango | Yellow| 8 |
4 | Apple | Green | 20 |
5 | Banana | Brown | 15 |
6 | Mango | Orange| 12 |
7 | Mango | Green | 5 |
这是我的主表,我基本上想要这样的主表中的数据。所以基本上Quan
主表是主表中所有个体的总和Quan
。主表中的颜色(红色、黄色、棕色);是指示主表中是否存在水果颜色的位。
TblMain:新的预期表
id | Name | Quan | Red | Yellow | Brown | Green | Orange |
===+=========+=======+=====+========+=======+=======+========+
1 | Apple | 30 | 1 | 0 | 0 | 1 | 0 |
2 | Banana | 20 | 0 | 1 | 1 | 0 | 0 |
3 | Mango | 25 | 0 | 1 | 0 | 1 | 1 |
我有以下查询,我有分组依据和总和。我无法填充主表的颜色部分。
INSERT INTO TblMain(Name, Quan)
(SELECT Name, SUM(Quan)
FROM TblPrimary
GROUP BY Name)
解决方案
您可以尝试sum
在子查询中使用 windows 函数,然后使用条件聚合函数生成您期望的结果。
select ROW_NUMBER() OVER(ORDER BY name) id,
name,
Quan,
SUM(CASE WHEN color = 'Red' THEN 1 ELSE 0 END) 'Red',
SUM(CASE WHEN color = 'Yellow' THEN 1 ELSE 0 END) 'Yellow',
SUM(CASE WHEN color = 'Brown' THEN 1 ELSE 0 END) 'Brown',
SUM(CASE WHEN color = 'Green' THEN 1 ELSE 0 END) 'Green',
SUM(CASE WHEN color = 'Orange' THEN 1 ELSE 0 END) 'Orange'
from (
SELECT name,
color,
SUM(Quan) OVER(PARTITION BY name ORDER BY name) Quan
FROM TblPrimary
) t1
group by name,Quan
结果
id name Quan Red Yellow Brown Green Orange
1 Apple 30 1 0 0 1 0
2 Banana 20 0 1 1 0 0
3 Mango 25 0 1 0 1 1
推荐阅读
- javascript - 使用 React Router 捆绑 Webpack
- r - 使用嵌套在组中的集合绘制多组线
- regex - 为什么非贪婪的正则表达式在 Sqlite 中失败?
- javascript - 从 React 调用外部 JavaScript 函数并作为参数传递和函数
- scala - 如何将数组元素映射到 Spark Dataframe 中的每条记录
- iis-10 - 网站每次都要求提供 Windows 凭据
- php - 如何使用文件资源管理器图片在 php 中获取背景
- java - 错误 Selenium 无法检索文档状态断开连接:收到 Inspector.detached 事件
- c++ - 为什么此代码无法正确反转数组
- javascript - 使用 JavaScript 和 ColdFusion 模板进行异步 DOM 操作?