sql - SQL Server 2018 如何在不同的列中分组信息
问题描述
我有一张这种(非常混乱)格式的表格。这是表中间列的快照,这就是数据中存在大漏洞的原因(其他列中有这些行的内容)。
+---------------+--------------------+--------------+--------------+
| upsell1 | upsell2 | upsell3 | upsell4 |
+---------------+--------------------+--------------+--------------+
| | | Car Kit | Scented Tabs |
| | | | |
| | | | |
| | Fiters | | |
| NULL | NULL | NULL | NULL |
| | | | |
| | Car Kit | Scented Tabs | |
| | | | |
| | | | |
+---------------+--------------------+--------------+--------------+
我正在寻找一个输出来对每个产品进行分组和计数,无论它出现在哪一列中。
+--------------+---------------+
| Product | Product Count |
+--------------+---------------+
| Car Kit | 2 |
| Scented Tabs | 2 |
| Fiters | 1 |
+--------------+---------------+
通常,如果它们都在一个列中,则很容易使用 group by 命令将 X 作为第 1 列,将 count(X) 作为第 2 列,但我正在寻找一种方法来让这些不同的信息正确地组合在一起.
注意:我不能改变表格的结构(让我很懊恼)
解决方案
我会这样做apply
:
select v.upsell, count(*)
from t cross apply
(values (upsell1), (upsell2), (upsell3), (upsell4)) v(upsell)
where v.upsell is not null
group by v.upsell;
你的问题有点不清楚空白是什么。你可能想要:
where v.upsell is not null and v.upsell <> ''
甚至:
where v.upsell is not null and ltrim(rtrim(v.upsell)) <> ''
推荐阅读
- laravel - 数组验证:多列的唯一验证
- google-analytics - Google 跟踪代码管理器触发异常无法按照文档中的说明工作
- reactjs - 我无法编译启动 React Native 应用程序
- android - 遮蔽整个屏幕(包括状态栏)
- r - 读入多个 .csv 文件
- php - 我可以在服务器上使用“包含”在应用程序之间共享库吗?
- laravel - 如何在 Laravel Vapor 中运行带参数的命令
- java - 如何在 Android Studio 中使用系数手动实现二阶带通滤波器?
- java - Spark:使用 groupBy 删除具有不同值的重复行
- arrays - 在 Swift 中将特定的数组元素移动到末尾