T-SQL中的重复项

时间:2018-11-10 22:49:48

标签: sql-server tsql

我这里有个严重的问题。我从查询中得到了这个结果。

请点击以下链接获取屏幕截图-我尚无法上传图片: https://i.stack.imgur.com/MgLJR.png

我尝试了此处显示的代码来消除重复项,但出现错误

  

列'clients.client_name'在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中

我的代码:

ALTER PROCEDURE dbo.spGetBcByBcNumber
    @BcNumber INT
AS
BEGIN
    SELECT 
        client_name, articles.article_id, article_name, 
        article_price, entry_number, 
        entry_number * article_price AS montant,  
        @BcNumber AS bc_number 
    FROM 
        articles 
    JOIN 
        entries ON articles.article_id = entries.article_id 
    JOIN 
        commandes ON commandes.bc_number = entries.bc_number 
    JOIN 
        clients ON clients.client_id = commandes.client_id 
    WHERE 
        commandes.bc_number = @BcNumber 
    GROUP BY 
        articles.article_id
END

有人可以解决吗?

1 个答案:

答案 0 :(得分:0)

您应该将要删除重复项的所有列添加到GROUP BY

尝试一下(记住代码的格式,这样可以提高可读性。):

ALTER PROCEDURE dbo.spGetBcByBcNumber
    @BcNumber INT
AS
BEGIN
    SELECT client_name
         , articles.article_id
         , article_name
         , article_price
         , entry_number
         , entry_number*article_price AS montant
         , @BcNumber AS bc_number 
    FROM articles 
        JOIN entries on articles.article_id = entries.article_id 
        JOIN commandes ON commandes.bc_number=entries.bc_number 
        JOIN clients ON clients.client_id=commandes.client_id 
    WHERE commandes.bc_number = @BcNumber 
    GROUP BY client_name
           , articles.article_id
           , article_name
           , article_price
           , entry_number
END

请注意,由于您已经按montantbc_number分组,因此计算列(GROUP BYarticle_price列不会进入entry_number