在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
相关产品推荐
相关产品推荐

