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

SQL Server 2016中如何将两行合并为一行多字段

解决SQL Server 2016中行转列合并数据的问题

针对你需要把Direction为S和R的两行数据合并成单行的需求,在SQL Server 2016里有两种常用的实现方式,下面一步步给你演示:

方法一:条件聚合(直观易上手)

这种方法通过CASE语句配合聚合函数(这里用MAX或SUM都可以,因为每个分组下对应方向仅一条数据),把行数据转成列展示:

IF OBJECT_ID('tempdb.dbo.#MyTable') IS NOT NULL DROP TABLE #MyTable
CREATE TABLE #MyTable ( Direction varchar(1), DateKey int, ID varchar(8), [Sessions] int )
INSERT INTO #MyTable VALUES('S', 20180301, 'ID123456', 46)
INSERT INTO #MyTable VALUES('R', 20180301, 'ID123456', 99)

-- 核心合并查询
SELECT 
    DateKey,
    ID,
    MAX(CASE WHEN Direction = 'S' THEN [Sessions] END) AS S_Sessions,
    MAX(CASE WHEN Direction = 'R' THEN [Sessions] END) AS R_Sessions
FROM #MyTable
GROUP BY DateKey, ID

方法二:使用PIVOT函数

SQL Server的PIVOT运算符专门用于行转列场景,语法更简洁:

IF OBJECT_ID('tempdb.dbo.#MyTable') IS NOT NULL DROP TABLE #MyTable
CREATE TABLE #MyTable ( Direction varchar(1), DateKey int, ID varchar(8), [Sessions] int )
INSERT INTO #MyTable VALUES('S', 20180301, 'ID123456', 46)
INSERT INTO #MyTable VALUES('R', 20180301, 'ID123456', 99)

-- 核心合并查询
SELECT 
    DateKey,
    ID,
    [S] AS S_Sessions,
    [R] AS R_Sessions
FROM #MyTable
PIVOT (
    MAX([Sessions])
    FOR Direction IN ([S], [R])
) AS PivotTable

最终合并结果

两种方法都会得到你想要的单行输出:

DateKeyIDS_SessionsR_Sessions
20180301ID1234564699

小提示:如果同一个DateKey+ID组合下存在多条同方向的数据,把聚合函数换成SUM就能自动汇总会话数啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:58:24