sql - 如何在数据中的每个“类别”更改之间向我的 SQL 结果中添加一行?
问题描述
我使用 SQL Server 2019 生成一长串运输选项。该列表通过对包含列表项的表的简单查询产生,并显示在手持终端上。用户发现导航列表以找到正确的选项既麻烦又耗时,并且必须每天多次这样做。
我想要做的是在列表中添加一个带有几个破折号的类别名称,然后我将其显示在手持终端上。这将显示为某种“分页符”,这将使他们能够快速直观地浏览列表。
这里的挑战是终端软件非常基础,无法修改。它只能做一件事,即执行“GetList”存储过程并按顺序读取该过程中的每一行,以创建然后显示给用户的列表。
输出必须是一个不超过 64 个字符宽的 varchar 列,所以我能做的事情非常有限。
我可以修改存储过程使用的数据表和查询,并且我已经成功地添加了 CategoryRank 和 ColumnRank 列,并使用它们来更改列表的显示顺序,以便对用户更有意义。
例如,
当前查询:
SELECT ListItem
FROM SymbolScanner.dbo.ShippingTypes WITH(NOLOCK))
ORDER BY CategoryRank,
ColumnRank
ShippingTypes 表:
ListItem varchar(64) NOT NULL PRIMARY KEY CLUSTERED,
Category varchar(100) NOT NULL,
CategoryRank int NOT NULL,
ColumnRank int NOT NULL
样本数据(实际列表长达数百项):
ListItem Category CategoryRank ColumnRank
RM 1st Class No Tracking Royal Mail 1 1
RM 1st Class Tracked Royal Mail 1 2
RM 2nd Class No Tracking Royal Mail 1 3
RM 2nd Class Tracked Royal Mail 1 4
TNT 24 Hour Tracked TNT 2 1
TNT 24 Hour No Tracking TNT 2 2
TNT 48 Hour Tracked TNT 2 3
TNT 48 Hour no Tracking TNT 2 4
DHL 24 Hour Tracked DHL 3 1
DHL 48 Hour Tracked DHL 3 1
电流输出:
RM 1st Class No Tracking
RM 1st Class Tracked
RM 2nd Class No Tracking
RM 2nd Class Tracked
TNT 24 Hour Tracked
TNT 24 Hour No Tracking
TNT 48 Hour Tracked
TNT 48 Hour No Tracking
DHL 24 Hour Tracked
DHL 48 Hour Tracked
结果只是一个 varchars 列表,按照我希望它们排序的方式排序。这很好,但我想在每个类别之间添加一个包含类别名称的视觉中断,以便用户更容易快速向下滚动并查看类别何时更改。
期望的输出:
---- Royal Mail ----
RM 1st Class No Tracking
RM 1st Class Tracked
RM 2nd Class No Tracking
RM 2nd Class Tracked
---- TNT ----
TNT 24 Hour Tracked
TNT 24 Hour No Tracking
TNT 48 Hour Tracked
TNT 48 Hour No Tracking
---- DHL ----
DHL 24 Hour Tracked
DHL 48 Hour Tracked
所以我需要在我的结果中插入一个额外的行,其中包括类别名称和一些短划线字符,在每次更改类别之前。我敢肯定有一些 SQL 体操可以用来做这件事,我只是有点迷失在哪里开始。
解决方案
您可以在第二个查询中创建标题行并通过 UNIONing 合并结果:
SELECT ListItem FROM
(
SELECT ListItem, CategoryRank, ColumnRank
FROM ShippingTypes
UNION ALL
SELECT '---- ' + Category + ' ----', CategoryRank, 0
FROM ShippingTypes
GROUP BY Category, CategoryRank
) sub
ORDER BY CategoryRank,
ColumnRank
推荐阅读
- r - 用于比较物种丰度的散点图
- python - 如何通过索引列表访问多维数组的元素
- jquery - 我需要从页面加载的下拉列表中动态选择一个选项
- mongodb - MongoDB 基于参考 id 加入用户和点赞集合
- flutter - 更新后缺少 Android Studio 图像资产编辑器
- digital-signature - Signtool.exe /dg /ds /di 选项和时间戳
- algorithm - 如何将json数据转换为html嵌套列表
- python - 使用 OpenCV Python 以与参考图像相同的方向和尺寸转换和显示裁剪图像
- python-3.x - 为什么 int("0xff",16) 计算但 int("hello", 16) 不计算?
- sql - 在 MS Access with VBA 中使用查询转置表