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

在SQL Server中使用INNER JOIN将多行合并为一行的实现方法

解决方案:使用INNER JOIN关联产品表与价格表

没问题,这是个很常见的关联查询需求,我来帮你实现对应的SQL语句。首先我假设你的产品表名为Products,价格表名为PriceListLines(根据你给出的价格表结构字段命名推断),我们通过两个表共有的ItemCode字段做关联,用INNER JOIN合并数据。

基础关联SQL语句

SELECT 
    p.ID,
    p.ItemCode,
    p.ProductName,
    pl.PriceListLineID,
    pl.Price,
    pl.PriceGroupCode,
    pl.LastUpdatedDate
FROM 
    Products p
INNER JOIN 
    PriceListLines pl ON p.ItemCode = pl.ItemCode;

关键点说明

  • 给表取别名p(产品表)和pl(价格表),能让SQL代码更简洁,也避免不同表中字段名冲突的问题。
  • INNER JOIN会只保留在两个表中都有对应ItemCode的记录——也就是说,如果某个产品没有价格记录,或者某条价格记录找不到匹配的产品,这些行都不会出现在结果里。

特殊情况处理:一个产品对应多条价格记录

如果你的价格表中同一个ItemCode可能有多条价格记录(比如不同价格组、不同时间的价格),而你想每个产品只返回最新的那条价格,可以用窗口函数ROW_NUMBER()来实现:

SELECT 
    ID,
    ItemCode,
    ProductName,
    PriceListLineID,
    Price,
    PriceGroupCode,
    LastUpdatedDate
FROM (
    SELECT 
        p.ID,
        p.ItemCode,
        p.ProductName,
        pl.PriceListLineID,
        pl.Price,
        pl.PriceGroupCode,
        pl.LastUpdatedDate,
        ROW_NUMBER() OVER (PARTITION BY p.ItemCode ORDER BY pl.LastUpdatedDate DESC) AS RowNum
    FROM 
        Products p
    INNER JOIN 
        PriceListLines pl ON p.ItemCode = pl.ItemCode
) AS SubQuery
WHERE RowNum = 1;

这个查询会给每个产品的价格记录按LastUpdatedDate倒序排序,然后只取排序后的第一条(也就是最新的那条价格数据)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:32:49