You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求编写SQL查询实现用户目标数据横向并列展示

SQL行转列:将用户关联的目标数据转为横向展示

现有用户与目标的一对多关联数据:

User_Target
UserATarget1
UserATarget2
UserATarget3
UserBTarget1
UserBTarget3
UserBTarget6

需要转换为以下横向格式,每个用户一行,目标按顺序作为独立列展示:

UserFirstTargetSecondTargetThirdTargetFourthTarget
UserATarget1Target2Target3
UserBTarget1Target3Target6

测试表创建脚本

CREATE TABLE [dbo].[UserTarget](
    [User_] [varchar](50) NULL,
    [Target] [varchar](50) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[UserTarget] ([User_], [Target]) VALUES (N'UserA', N'Target1')
INSERT [dbo].[UserTarget] ([User_], [Target]) VALUES (N'UserA', N'Target2')
INSERT [dbo].[UserTarget] ([User_], [Target]) VALUES (N'UserA', N'Target3')
INSERT [dbo].[UserTarget] ([User_], [Target]) VALUES (N'UserB', N'Target1')
INSERT [dbo].[UserTarget] ([User_], [Target]) VALUES (N'UserB', N'Target3')
INSERT [dbo].[UserTarget] ([User_], [Target]) VALUES (N'UserB', N'Target6')
GO

实现查询语句

WITH RankedTargets AS (
    SELECT 
        User_,
        Target,
        -- 按用户分组,为每个目标分配排序序号
        ROW_NUMBER() OVER (PARTITION BY User_ ORDER BY Target) AS TargetRank
    FROM dbo.UserTarget
)
SELECT 
    User_ AS [User],
    [1] AS FirstTarget,
    [2] AS SecondTarget,
    [3] AS ThirdTarget,
    [4] AS FourthTarget
FROM RankedTargets
-- 将序号对应的目标值转为横向列
PIVOT (
    MAX(Target)
    FOR TargetRank IN ([1], [2], [3], [4])
) AS PivotResult;

关键逻辑说明

  • ROW_NUMBER():按User_分组,对每个用户的目标进行排序并分配序号(默认按Target字段排序,需自定义顺序可调整ORDER BY子句)。
  • PIVOT:将序号对应的目标值转为横向列,这里设置到第四列,若用户有更多目标可继续扩展[5], [6]等列。
  • 若用户目标数量不足指定列数,对应列会显示为NULL。

内容的提问来源于stack exchange,提问作者Kalendar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:50:34