Sql 查询订单详细信息时获取特定类别下的订单总数
我有一个orders表,其中包含order detail和名为Category的列,其中Category是订单的类型 现在,客户可以搜索订单详细信息 现在我要写的是一个查询,显示订单详细信息和一个名为TotalOrder的列,该列将显示所有客户针对该类别下的TotalOrders 例如,将订单表设置为Sql 查询订单详细信息时获取特定类别下的订单总数,sql,sql-server-2008,Sql,Sql Server 2008,我有一个orders表,其中包含order detail和名为Category的列,其中Category是订单的类型 现在,客户可以搜索订单详细信息 现在我要写的是一个查询,显示订单详细信息和一个名为TotalOrder的列,该列将显示所有客户针对该类别下的TotalOrders 例如,将订单表设置为 OrderID CustomerID OrderDetails Category 1 1 test A1 2 1
OrderID CustomerID OrderDetails Category
1 1 test A1
2 1 test1 A2
3 2 test3 A2
4 3 test4 A2
因此,如果查询订单id 1
它的结果与订单ID 2类似
OrderID Cust_ID OrderDetails Category TotalOrdersInThisCategory
2 1 test A2 3
此场景演示了实际问题
我怎样才能做到这一点
我是否需要使用GROUPBYCATEGORY子句在一个查询和另一个查询中获取订单详细信息,然后进行内部联接。任何更好的想法都是值得欣赏的
订单详细信息将有数百万条记录
请建议这个问题的更好的标题
谢谢你的帮助
SELECT
OrderID,
Cust_ID,
OrderDetails,
Category,
(select count(*) from orders where category = o.category) TotalOrdersInThisCategory
FROM
Orders o
或者你可以试试这个:
SELECT
o.OrderID,
o.Cust_ID,
o.OrderDetails,
o.Category,
c.TotalOrdersInThisCategory
FROM
Orders o
INNER JOIN (select category, count(*) from orders group by category) c
ON o.Category = c.Category
您可以尝试一下,看看它是否运行得更好:
SELECT *
FROM ( SELECT *, COUNT(*) OVER(PARTITION BY Category) TotalOrdersInThisCategory
FROM OrderTable) A
WHERE OrderId = 2
我不明白你的例子,你说的是OrderId 2,但把OrderdId 1的细节和3个总数放在A1类上,应该只有1…@Lamak真的很抱歉,错误地写了A1而不是A2。我已经通过违反Dry原则解决了这个问题,因为我首先创建了一个CTE,使用Group by Category,然后与查询进行内部连接,请提供一些更好的示例。我的orders表有数千万条记录,因此如果我尝试搜索几百条订单,这段代码将对性能产生很大影响。因此,这对于生产目的可能没有用处。或者你怎么想?最好的方法是分析几种方法,看看你的平台最喜欢哪一种。我在我的原始答案中增加了另一种方法。实际上,第二种方法比第一种更好,但我用同样的方法,只是用CTE代替了按类别c从订单组中选择类别、计数*。但是速度上没有差别,但是感谢postno,按类别totalorders进行的SELECT、COUNT超额分配从OrderTable中选择该类别本身花费了太多的时间,因为OrderTable有大量的数据。