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

Microsoft SQL中实现多行用户参数数据转单行多列

SQL多行转单行多列(自定义表头)解决方案(Microsoft SQL)

针对你的需求,这里提供两种在Microsoft SQL中实现多行转单行多列、自定义表头的可行方法:

方法一:使用PIVOT函数

PIVOT是SQL Server专门用于行转列的内置函数,适合已知需要转换的列名的场景:

SELECT 
    CLASS AS 用户账号,
    [VOICE#] AS 语音编号,
    [LAST_ACCESS] AS 最后访问时间,
    [LOGIN_STAT] AS 登录状态,
    [PASSWORD] AS 密码,
    [PIN] AS PIN码,
    [S_LOGIN_ACCESS] AS 安全登录权限,
    [VM_LAST_LOGIN] AS 语音邮箱最后登录时间,
    [VM_PIN_UPDATE] AS 语音邮箱PIN更新时间,
    [WEB_FIRST_LOGIN] AS 网页首次登录时间
FROM (
    -- 子查询过滤出目标数据
    SELECT [CLASS], [KEYNAME], [KEY] 
    FROM [DBO].[UserRecords]
    WHERE [KEYNAME] IN ('VOICE#', 'LAST_ACCESS', 'LOGIN_STAT', 'PASSWORD', 'PIN', 'S_LOGIN_ACCESS', 'VM_LAST_LOGIN', 'VM_PIN_UPDATE', 'WEB_FIRST_LOGIN')
      AND [CLASS] = 'TESTUSERACCOUNT'
) AS SourceTable
PIVOT (
    -- 聚合函数取对应KEY值(因单用户单参数仅一行,MAX适用)
    MAX([KEY]) 
    -- 指定要转成列的字段
    FOR [KEYNAME] IN ([VOICE#], [LAST_ACCESS], [LOGIN_STAT], [PASSWORD], [PIN], [S_LOGIN_ACCESS], [VM_LAST_LOGIN], [VM_PIN_UPDATE], [WEB_FIRST_LOGIN])
) AS PivotTable;

方法二:使用CASE WHEN + 聚合函数

如果对PIVOT不熟悉,也可以用CASE结合聚合函数实现,兼容性更强:

SELECT 
    CLASS AS 用户账号,
    MAX(CASE WHEN KEYNAME = 'VOICE#' THEN [KEY] END) AS 语音编号,
    MAX(CASE WHEN KEYNAME = 'LAST_ACCESS' THEN [KEY] END) AS 最后访问时间,
    MAX(CASE WHEN KEYNAME = 'LOGIN_STAT' THEN [KEY] END) AS 登录状态,
    MAX(CASE WHEN KEYNAME = 'PASSWORD' THEN [KEY] END) AS 密码,
    MAX(CASE WHEN KEYNAME = 'PIN' THEN [KEY] END) AS PIN码,
    MAX(CASE WHEN KEYNAME = 'S_LOGIN_ACCESS' THEN [KEY] END) AS 安全登录权限,
    MAX(CASE WHEN KEYNAME = 'VM_LAST_LOGIN' THEN [KEY] END) AS 语音邮箱最后登录时间,
    MAX(CASE WHEN KEYNAME = 'VM_PIN_UPDATE' THEN [KEY] END) AS 语音邮箱PIN更新时间,
    MAX(CASE WHEN KEYNAME = 'WEB_FIRST_LOGIN' THEN [KEY] END) AS 网页首次登录时间
FROM [DBO].[UserRecords]
WHERE [KEYNAME] IN ('VOICE#', 'LAST_ACCESS', 'LOGIN_STAT', 'PASSWORD', 'PIN', 'S_LOGIN_ACCESS', 'VM_LAST_LOGIN', 'VM_PIN_UPDATE', 'WEB_FIRST_LOGIN')
  AND [CLASS] = 'TESTUSERACCOUNT'
GROUP BY CLASS;

说明

  • 两种方法都通过AS关键字自定义了表头,你可以根据实际需求修改别名(比如把“语音编号”改成业务需要的名称)。
  • 聚合函数MAX的作用是排除CASE WHEN返回的NULL值,仅保留对应参数的有效值(因单用户单参数仅一行数据,不会有冲突)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:52:48