Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql查询以显示在表中多次出现的记录_Sql_Sql Server - Fatal编程技术网

Sql查询以显示在表中多次出现的记录

Sql查询以显示在表中多次出现的记录,sql,sql-server,Sql,Sql Server,我有两个表,Customer列有CustomerID、FirstName、Address和PurchaseID、Qty、CustomersID列 我想创建一个查询,显示购买了两个以上产品的名字,产品数量由数量表示 我似乎无法理解这一点——我刚刚开始使用t-SQL,您可以计算购买金额并使用having子句筛选您感兴趣的项目。然后,您可以使用中的操作符仅查询符合这些ID的客户名称: SELECT FirstName FROM Customer WHERE CustomerID IN (SELE

我有两个表,
Customer
列有
CustomerID、FirstName、Address
PurchaseID、Qty、CustomersID

我想创建一个查询,显示购买了两个以上产品的名字,产品数量由数量表示


我似乎无法理解这一点——我刚刚开始使用t-SQL,您可以计算购买金额并使用
having
子句筛选您感兴趣的项目。然后,您可以使用中的
操作符仅查询符合这些ID的客户名称:

SELECT FirstName
FROM   Customer
WHERE  CustomerID IN (SELECT   CustomerID
                      FROM     Purchases
                      GROUP BY CustomerID
                      HAVING   SUM(Qty) > 2)

您可以对购买的物品进行合计,并使用
having
子句筛选您感兴趣的物品。然后,您可以使用
中的
操作符仅查询符合这些ID的客户名称:

SELECT FirstName
FROM   Customer
WHERE  CustomerID IN (SELECT   CustomerID
                      FROM     Purchases
                      GROUP BY CustomerID
                      HAVING   SUM(Qty) > 2)
请试试这个:

select c.FirstName,p.Qty
from Customer as c
join Purchase as p
on c.CustomerID = p.CustomerID
where CustomerID in (select CustomerID from Purchases group by CustomerID having count(CustomerID)>2);
请试试这个:

select c.FirstName,p.Qty
from Customer as c
join Purchase as p
on c.CustomerID = p.CustomerID
where CustomerID in (select CustomerID from Purchases group by CustomerID having count(CustomerID)>2);
请试试这个,根据你的问题,它应该适合你

请试试这个,根据你的问题,它应该适合你

虽然IN建议会起作用,但它们有点矫枉过正,而且很可能比直接加入聚合的性能要差。诀窍是HAVING子句,通过使用它,您可以将结果限制为所需的名称。这里有一个链接,可以了解有关IN vs.Exists vs.JOIN()的更多信息

有几十种方法可以做到这一点,并向您介绍窗口函数和常用表表达式,对于这个简化的示例来说,这些方法已经过时了,但在您的工具集中非常有用,因为您的查询将继续变得更加复杂:

;WITH cte AS (
    SELECT DISTINCT
       c.FirstName
       ,SUM(p.Qty) OVER (PARTITION BY c.CustomerId) as SumOfQty
    FROM
       Customer c
       INNER JOIN Purchases p
       ON c.CustomerId = p.CustomerId
)

SELECT *
FROM
    cte
WHERE
     SumOfQty > 2
虽然IN建议会起作用,但它们有点矫枉过正,而且很可能比直接加入聚合的性能要差。诀窍是HAVING子句,通过使用它,您可以将结果限制为所需的名称。这里有一个链接,可以了解有关IN vs.Exists vs.JOIN()的更多信息

有几十种方法可以做到这一点,并向您介绍窗口函数和常用表表达式,对于这个简化的示例来说,这些方法已经过时了,但在您的工具集中非常有用,因为您的查询将继续变得更加复杂:

;WITH cte AS (
    SELECT DISTINCT
       c.FirstName
       ,SUM(p.Qty) OVER (PARTITION BY c.CustomerId) as SumOfQty
    FROM
       Customer c
       INNER JOIN Purchases p
       ON c.CustomerId = p.CustomerId
)

SELECT *
FROM
    cte
WHERE
     SumOfQty > 2

如果你刚刚开始,你应该编辑问题并展示一些尝试。如果你刚刚开始,你应该编辑问题并展示一些尝试。我通常喜欢重复数据的这种机制,但因为名字只是重复的,你已经在一组一组地做了。我通常喜欢重复数据的这种机制,但因为名字只是重复的,你已经在一组一组地做了信息技术