我这里有个严重的问题。我从查询中得到了这个结果。
请点击以下链接获取屏幕截图-我尚无法上传图片: 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
有人可以解决吗?
答案 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
请注意,由于您已经按montant
和bc_number
分组,因此计算列(GROUP BY
和article_price
列不会进入entry_number