SQL查询从多个列返回最大值

美元

我在SQL Server 2008 R2数据库中具有以下表:

Customers
=========
CustID  CustName
======  ========
0       NULL
1       A
2       B
3       C

InterestingCustomers
====================
CustID
======
0
1
3

Orders
======
CustID  OrderID  InvoiceTotal  Discount
======  =======  ============  ========
0       NULL     2000          NULL
0       100      NULL          500      
1       1        100           NULL
1       2        90            15
2       3        300           25
2       4        50            0
3       5        100           10
3       6        200           25
3       7        150           NULL
3       8        120           20

我想要一个查询,该查询显示所有订单中每个CustID和CustName的InvoiceTotal和Discount列的最大值,但前提是客户出现在InterestingCutomers中且ID> 0:

CustID  CustName  MaxInvoiceTotal  MaxDiscount
1       A         100              15
3       C         200              25

我遇到的一种麻烦是,我的应用程序是使用Jet 4.0和ADO的旧版VB6。这缺乏对托管数据库的SQL Server 2008的许多高级功能的支持。此处列出了我可用的SQL函数:https : //support.microsoft.com/zh-cn/kb/294698

到目前为止,我已经能够获得最大的InvoiceTotal,但是我无法扩展相同的查询来返回其他任何列的最大值。

以下正确返回每个有效CustID的最大InvoiceTotal:

SELECT Customers.CustID, CustName, InvoiceTotal, Discount 
FROM ((Customers INNER JOIN Interesting ON Customers.CustID = Interesting.CustID) INNER JOIN Orders ON Customers.CustID = Orders.CustID) 
WHERE ((CustID > 0) 
AND (InvoiceTotal IN 
(SELECT MAX(InvoiceTotal) AS MaxInvoiceTotal 
FROM Orders 
WHERE Orders.CustID = Customers.CustID)))

返回值:

CustID  CustName  MaxInvoiceTotal
1       A         100            
3       C         200            

但是,扩展WHERE子句以将每位客户的Discount限制为最大值只能返回InvoiceTotal和Discount都恰好是最大值并且属于同一订单的记录:

WHERE ((CustID > 0) AND (InvoiceTotal IN 
(SELECT MAX(InvoiceTotal) AS MaxInvoiceTotal 
FROM Orders 
WHERE Orders.CustID = Customers.CustID)) AND 
Discount IN 
(SELECT MAX(Discount) AS MaxDiscount 
FROM Orders 
WHERE Orders.CustID = Customers.CustID))

返回值:

CustID  CustName  MaxInvoiceTotal  MaxDiscount
3       C         200              25

未选择CustID 1,因为其最大InvoiceTotal值与其最大折扣值属于不同的顺序。我假设这两个条件都是针对符合条件的每个订单进行测试的,但是我想以某种方式删除OrderID与InvoiceTotal和Discount之间的关联。OR-ing附加子句不起作用。

我怀疑我可能在UNION这里,但鉴于我所概述的限制,我想检查是否有一种更清洁或更有效的方法。

Gunvant.k
SELECT Customers.CustID, CustName, MaxInvoiceTotal, MaxDiscount 
FROM Customers 
INNER JOIN Interesting ON Customers.CustID = Interesting.CustID
INNER JOIN (SELECT CustID, MAX(Discount) AS MaxDiscount 
            FROM Orders
            Group by CustID) MaxDiscountOrders ON Customers.CustID =     
            MaxDiscountOrders.CustID
INNER JOIN (SELECT CustID, MAX(InvoiceTotal) AS MaxInvoiceTotal 
            FROM Orders
            Group by CustID) MaxInvoiceTotalOrders ON Customers.CustID     
            = MaxInvoiceTotalOrders.CustID
WHERE CustID > 0

尝试一下。。我还没有检查语法错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JPQL / JPA查询基于两列的最大值/最大值对实体进行排序?

来自分类Dev

SQL查询最小值和最大值

来自分类Dev

在SQL Server 2008中跨列返回最大值

来自分类Dev

SQL中有多个最大值

来自分类Dev

SQL Server存储过程增加varchar列的最大值并返回输出

来自分类Dev

从SQL选择中返回最大值

来自分类Dev

SQL查询以从列中获取最大值

来自分类Dev

如何在SQL中找到具有多个最大值的组的最大值?

来自分类Dev

SQL返回列中具有最大值(在特定范围内)的行

来自分类Dev

查询以返回日期范围内的行,但仅返回列的最大值

来自分类Dev

sql查询性能:查找最大值

来自分类Dev

Oracle-SQL查询以获取已从String转换为Integer的列的最大值

来自分类Dev

SQL查询以获取另一列中每个唯一值的最大值

来自分类Dev

SQL查询最小值和最大值

来自分类Dev

如何在SQL中的某一列中基于最大值返回多行

来自分类Dev

解析云:无法返回列中最大值查询的值

来自分类Dev

返回包含Excel中最大值的列的列标题

来自分类Dev

Excel-返回最大值的列标题(如果重复的最大值,则返回随机列)

来自分类Dev

从列SQL中选择最大值

来自分类Dev

在具有多个条件的向量中返回最大值

来自分类Dev

Oracle SQL:仅返回最大值

来自分类Dev

选择列的SQL最大值

来自分类Dev

SQL Server查询应返回最大值记录

来自分类Dev

查询结果后获取列的最大值-SQL

来自分类Dev

查询返回具有一列最大值的行

来自分类Dev

SQL查询返回多个值

来自分类Dev

如何在基于另一列值的非聚合 sql 查询中返回最大值

来自分类Dev

SQL Oracle 只返回列值的最大值(值)

来自分类Dev

返回最大值的位置(列)

Related 相关文章

热门标签

归档