首页 > 解决方案 > T-SQL 中的重复条目

问题描述

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

请点击此链接获取屏幕截图 - 我还无法上传图片: 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

有人有解决方案吗?

标签: sql-servertsql

解决方案


您应该将要删除重复项的所有列添加到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

请注意,计算的列 ( montant) 和bc_numbercolumn 不在 中,因为您已经按andGROUP BY分组。article_priceentry_number


推荐阅读