gpt4 book ai didi

sql - 如何编写 SQL 查询来匹配同一列中的两个条件?

转载 作者:行者123 更新时间:2023-12-02 09:30:12 25 4
gpt4 key购买 nike

我正在开发 AdventureWorks2014 数据库,需要检索在 2011 年和 2014 年下订单的客户的 ID。到目前为止,我有以下查询:

SELECT CustomerID, SalesOrderID, YEAR(OrderDate) AS 'Year'
FROM Sales.SalesOrderHeader
WHERE YEAR(OrderDate) IN (2011,2014)
HAVING COUNT(YEAR(OrderDate))=2;

当我尝试运行它时,出现错误:

Column 'Sales.SalesOrderHeader.CustomerID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

我尝试添加 GROUP BYORDER BY,但结果是出现一个空表。我不一定需要使用HAVING COUNT,这只是我想到的一个想法。有没有办法列出 2011 年和 2014 年重复的 CustomerID?我被困住了,也许我没有看到简单的东西?

编辑:我确实需要同时选择 SalesOrderID 和 Year,而不仅仅是 CustomerID。这通常是我遇到麻烦的地方。

最佳答案

您必须在 COUNT 中使用 GROUP BY CustomerID 和 DISTINCT 关键字,以便仅计算 2014 年的一个和 2011 年的一个(以防每年有很多订单):

SELECT CustomerID
FROM Sales.SalesOrderHeader
WHERE YEAR(OrderDate) IN (2011,2014)
GROUP BY CustomerID
HAVING COUNT(DISTINCT YEAR(OrderDate))=2;

要选择这些客户的所有订单,请尝试以下操作:

SELECT CustomerID, SalesOrderID, YEAR(OrderDate) AS 'Year'
FROM Sales.SalesOrderHeader
WHERE CustomerID IN
(SELECT CustomerID
FROM Sales.SalesOrderHeader
WHERE YEAR(OrderDate) IN (2011,2014)
GROUP BY CustomerID
HAVING COUNT(DISTINCT YEAR(OrderDate))=2
)

或者使用 JOIN 语法,如 @dasblinkenlight 的答案。

关于sql - 如何编写 SQL 查询来匹配同一列中的两个条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33999140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com