如何将数据库中分离行的标签与数据合并到同一行?
问题描述
数据库里数据和标签分开存储在不同行,现在需要编写SQL查询把标签与对应数据展示在同一行。规则如下:
AssignmentName字段包含CiscoLicenseLabel的行,对应标签值AssignmentName字段包含CiscoLicenseEnabled的行,对应匹配的数据值
当前使用的查询语句:
SELECT cps.CustomPollerAssignmentID, cps.Status, RowID, cpa.AssignmentName FROM Orion.NPM.CustomPollerStatus cps INNER JOIN Orion.NPM.CustomPollerAssignment AS [cpa] ON cpa.custompollerassignmentID = cps.CustomPollerAssignmentID WHERE cpa.AssignmentName LIKE 'CiscoLicense%' ORDER BY RowID, Status
试过分区行号关联的方法但没成功,想实现将对应标签与数据合并到同一行。
解决方案
可以用自连接的方式实现,把标签行和数据行按RowID关联,就能将对应内容合并到同一行:
SELECT label.RowID, label.Status AS 标签状态, label.CustomPollerAssignmentID AS 标签任务ID, label.AssignmentName AS 标签名称, data.Status AS 数据状态, data.CustomPollerAssignmentID AS 数据任务ID, data.AssignmentName AS 数据名称 FROM ( SELECT cps.CustomPollerAssignmentID, cps.Status, cps.RowID, cpa.AssignmentName FROM Orion.NPM.CustomPollerStatus cps INNER JOIN Orion.NPM.CustomPollerAssignment cpa ON cpa.custompollerassignmentID = cps.CustomPollerAssignmentID WHERE cpa.AssignmentName LIKE '%CiscoLicenseLabel%' ) AS label INNER JOIN ( SELECT cps.CustomPollerAssignmentID, cps.Status, cps.RowID, cpa.AssignmentName FROM Orion.NPM.CustomPollerStatus cps INNER JOIN Orion.NPM.CustomPollerAssignment cpa ON cpa.custompollerassignmentID = cps.CustomPollerAssignmentID WHERE cpa.AssignmentName LIKE '%CiscoLicenseEnabled%' ) AS data ON label.RowID = data.RowID ORDER BY label.RowID;
思路说明
- 拆分两个子查询:
label子查询专门筛选所有标签行(AssignmentName包含CiscoLicenseLabel的记录)data子查询专门筛选所有数据行(AssignmentName包含CiscoLicenseEnabled的记录)
- 用
RowID作为关联条件,将两组数据拼接,同一个RowID对应的标签和数据就会出现在同一行 - 可按需调整展示字段,给字段设置易懂的别名,让结果更直观
如果RowID无法完全确保标签与数据的对应关系,可以结合业务场景,增加其他关联字段(比如设备ID)来提升匹配准确性。
内容的提问来源于stack exchange,提问作者wetin
相关产品推荐
相关产品推荐

