Sql 使用两个表之间的内部联接,对于多个记录wrt 1个特定列,sum integer列,使varchar列以逗号分隔

Sql 使用两个表之间的内部联接,对于多个记录wrt 1个特定列,sum integer列,使varchar列以逗号分隔,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在做两张桌子 以下是结构- MainComponents (ComponentNo varchar(255), description varchar(255),cost float, Age int); RevisedComponents(ComponentNo varchar(255), description varchar(255), cost float, Age int); 对于componentNo列,两个表都可以有多个值。 所以,如果我进行内部连接,我可以为每个组件获得多行

我正在做两张桌子

以下是结构-

MainComponents (ComponentNo varchar(255), description varchar(255),cost float, Age int);
RevisedComponents(ComponentNo varchar(255), description varchar(255), cost float, Age int);
对于componentNo列,两个表都可以有多个值。 所以,如果我进行内部连接,我可以为每个组件获得多行no

我试图为每个组件只获取一行否,说明列应以逗号分隔(如果值不同),成本列应汇总,所有行的年龄都相同,因此选择任意行值

样本输出数据-

ComponentNo - AHGHGHHHK

Description - HW,SW

Cost - 100(50+50)
Age - 10
请帮忙


谢谢

首先,在两个表上执行一个
连接。要获取
成本
,请使用
总和
。要获取
年龄
,可以使用
MIN
MAX
。然后使用XML路径的
连接
说明

SELECT
    mc.ComponentNo,
    x.Description,
    Cost = SUM(rc.Cost),
    Age = MIN(rc.Age)
FROM MainComponents mc
INNER JOIN RevisedComponents rc
    ON rc.ComponentNo = mc.ComponentNo
CROSS APPLY(
    SELECT STUFF((
        SELECT DISTINCT ', ' + description
        FROM RevisedComponents
        WHERE ComponentNo = mc.ComponentNo
        FOR XML PATH('')
    ), 1, 2, '') AS Description
)x
GROUP BY mc.ComponentNo, x.Description

请提供主要部件和修订部件的样本数据。确保它与您的示例输出相匹配。Hi Felix,MainComponent(AHGHHK,HW,50,10),ReviedComponents(AHGHHK,HW,50,10)(AHGHHK,SW,50,10)。我假设我将使用内部joinHi Felix获取此组件的行-AHGHGHHK,假设我有3条记录。描述包括-硬件、硬件、软件。如何确保hw只出现一次。请帮忙谢谢Felix,让我试试这个并回复。非常感谢菲利克斯,假设我有3张唱片。描述包括-硬件、硬件、软件。如何确保hw只出现一次。请帮助只需在
内容中添加一个
独特的
<代码>选择不同的“,”+说明…
@SG_u”,然后请接受答案,以便解决此问题。