sql - 子查询返回超过 1 个值 - 多个错误消息
问题描述
我在下面有这段代码,我收到了这个错误:子查询返回了超过 1 个值。如您所见,我正在使用导致此问题的子查询。
该怎么办?请帮我解决这个问题。
SELECT
[MAGASIN] = ET2.ET_LIBELLE ,
[CA]= sum(GL_MONTANTTTC),
[NBR TICKET] = count(distinct GL_NUMERO),
(SELECT
[NBR TICKET] = count(distinct GL_NUMERO)
FROM GCLIGNEARTDIM
LEFT OUTER JOIN ETABLISS ET2 ON GL_ETABLISSEMENT=ET2.ET_ETABLISSEMENT
LEFT OUTER JOIN COMMERCIAL GCL3 ON GL_REPRESENTANT=GCL3.GCL_COMMERCIAL
WHERE (GL_DATEPIECE >= '20190228 00:00:00' AND GL_DATEPIECE < '20190301 00:00:00'
AND (GCL3.GCL_LIBELLE='vendeur x'))
AND GL_ETABLISSEMENT in ('W01','W05','F10')
GROUP BY
ET2.ET_LIBELLE
)AS 'VENDEUR X'
FROM GCLIGNEARTDIM
LEFT OUTER JOIN ETABLISS ET2 ON GL_ETABLISSEMENT=ET2.ET_ETABLISSEMENT
LEFT OUTER JOIN COMMERCIAL GCL3 ON GL_REPRESENTANT=GCL3.GCL_COMMERCIAL
WHERE (GL_DATEPIECE >= '20190228 00:00:00' AND GL_DATEPIECE < '20190301 00:00:00'
AND GL_ETABLISSEMENT in ('W01','W05','F10')
GROUP BY
ET2.ET_LIBELLE
ORDER BY
ET2.ET_LIBELLE
解决方案
您的代码可以使用一些重新格式化来帮助提高可读性。如果人们可以快速轻松地消化您的问题和代码,您更有可能获得高质量的答案。此外,您在外部查询的 WHERE 子句中有一个额外的左括号。
使用子查询时,应避免使用与外部查询相同的表别名。使用唯一别名。
您遇到的问题是由您生成列 VENDEUR X 的子查询引起的。要使子查询正常工作,它只需要在执行时返回一行。在您的情况下,它返回多行抛出错误消息。
要解决问题,请独立运行子查询并检查返回的数据。您正在对具有多个值的列 ET2.ET_LIBELLE 进行分组。根据我猜你正在尝试做的事情,你应该将 ET2.ET_LIBELLE 添加到 WHERE 子句中。请参阅下面的示例。
SELECT
[MAGASIN] = ET2.ET_LIBELLE,
[CA]= SUM(GL_MONTANTTTC),
[NBR TICKET] = COUNT(DISTINCT GL_NUMERO),
(
SELECT [NBR TICKET] = COUNT(DISTINCT GL_NUMERO)
FROM
GCLIGNEARTDIM
LEFT OUTER JOIN ETABLISS ETI ON GL_ETABLISSEMENT=ETI.ET_ETABLISSEMENT
LEFT OUTER JOIN COMMERCIAL GCLI ON GL_REPRESENTANT=GCLI.GCL_COMMERCIAL
WHERE
(
GL_DATEPIECE >= '20190228 00:00:00'
AND GL_DATEPIECE < '20190301 00:00:00'
AND (GCL3.GCL_LIBELLE='vendeur x')
)
AND GL_ETABLISSEMENT IN ('W01','W05','F10')
AND ETI.ET_LIBELLE = ET2.ET_LIBELLE
) AS 'VENDEUR X'
FROM
GCLIGNEARTDIM
LEFT OUTER JOIN ETABLISS ET2 ON GL_ETABLISSEMENT=ET2.ET_ETABLISSEMENT
LEFT OUTER JOIN COMMERCIAL GCL3 ON GL_REPRESENTANT=GCL3.GCL_COMMERCIAL
WHERE
GL_DATEPIECE >= '20190228 00:00:00'
AND GL_DATEPIECE < '20190301 00:00:00'
AND GL_ETABLISSEMENT IN ('W01','W05','F10')
GROUP BY
ET2.ET_LIBELLE
ORDER BY
ET2.ET_LIBELLE
推荐阅读
- mod-rewrite - 无法使用 apache http 服务器中 Location 标记中的上下文路径删除 url 中的空参数
- c++ - websocat 是否正确处理与 websocketpp 服务器的关闭握手?
- vaadin - Vaadin 14 - 错误:检测到从 DOM 中删除的容器元素
- azure-devops - 如何在 azure devops 管道中应用 terraform.tfvars
- cloudflare-workers - Cloudflare worker node.js 中的环境变量使用
- c - 为什么我的指针不想被取消引用?
- javascript - ?. 在打字稿中?
- javascript - Javascript 更新字段
- java - 在arraylist中存储同一父级的多个数据类型
- python - 端点 URL 无法访问 ConnectTimeoutError:端点 URL 上的连接超时:“https://glue.ap-south-1.amazonaws.com/”