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

如何将Product表的多行查询结果转换为单行多列的重复列结构?

把SQL Server Product表多行结果转成单行多列的解决方案

嘿,我来帮你搞定这个多行转单行多列的需求!刚好你的Product表有固定4条数据,咱们用行号配合条件聚合的方式就能轻松实现,直接上代码和说明:

原表结构与示例数据

先确认下你的表结构和测试数据(方便复现):

CREATE TABLE [dbo].[Product](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](max) NOT NULL,
    [Price] [int] NOT NULL,
    [Qty] [int] NOT NULL
)

-- 插入示例数据
INSERT INTO [dbo].[Product] ([Name], [Price], [Qty])
VALUES 
('NIKE', 600, 1),
('ADIDAS', 500, 2),
('Skechers', 400, 5),
('FILA', 250, 10)

实现查询语句

这个方法的核心是先给每条记录标记行号,再用条件聚合把每行的字段映射到单行的多列中:

SELECT
    MAX(CASE WHEN rn = 1 THEN Name END) AS Name,
    MAX(CASE WHEN rn = 1 THEN Price END) AS Price,
    MAX(CASE WHEN rn = 1 THEN Qty END) AS Qty,
    MAX(CASE WHEN rn = 2 THEN Name END) AS Name,
    MAX(CASE WHEN rn = 2 THEN Price END) AS Price,
    MAX(CASE WHEN rn = 2 THEN Qty END) AS Qty,
    MAX(CASE WHEN rn = 3 THEN Name END) AS Name,
    MAX(CASE WHEN rn = 3 THEN Price END) AS Price,
    MAX(CASE WHEN rn = 3 THEN Qty END) AS Qty,
    MAX(CASE WHEN rn = 4 THEN Name END) AS Name,
    MAX(CASE WHEN rn = 4 THEN Price END) AS Price,
    MAX(CASE WHEN rn = 4 THEN Qty END) AS Qty
FROM (
    -- 子查询:给每条数据按ID排序添加行号,保证顺序和示例一致
    SELECT 
        Name, Price, Qty,
        ROW_NUMBER() OVER (ORDER BY ID) AS rn
    FROM [dbo].[Product]
) AS ranked_products

小说明

  • 子查询里的ROW_NUMBER() OVER (ORDER BY ID)是为了给每行数据分配唯一的行号,确保我们能准确对应到原表的4条记录;
  • 外层的MAX(CASE...)用来提取对应行号的字段值,因为我们要把所有行聚合到一行,用MAX(或者MIN,这里每个行号对应唯一值,效果相同)就能精准拿到目标值;
  • 如果你担心重复列名在某些工具里有问题,也可以把列名改成Name1、Price1这种带序号的形式,可读性会更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:23:51