0

我正在尝试从 Excel 表中按 ID 选择 MAX(QTYSOLDTHISDAY)。但下面的代码不断选择许多具有 MAX 值的记录。我只需要选择一条记录。我试过按ID分组,它没有用。这是我的代码。谢谢

Dept(0) = "01"
    Dept(1) = "02"
    Dept(2) = "03"
    Dept(3) = "04"
    Dept(4) = "05"
Dim DeptNum As String
Using cn As New OleDbConnection With {.ConnectionString = String.Format(ConnectionNoHeader6, FileName6)}
        Dim dt7 As New DataTable
        cn.Open()
        For Each DeptNum In Dept
            Dim cmd1 As OleDbCommand = New OleDbCommand(
                <Text>
                SELECT 
                    ID,
                        ARTNAME,
                            NETAMOUNTTHISDAY,
                            QTYSOLDTHISDAY,
                             AVAILABLESTOCK


                FROM [<%= SheetName6 %>$]
 WHERE ID = <%= DeptNum %>  and QTYSOLDTHISDAY=(select max(QTYSOLDTHISDAY) from [<%= SheetName6 %>$] where ID =  <%= DeptNum %>  group by ID)
</Text>.Value,
                    cn
            )
            dt7.Load(cmd1.ExecuteReader)
            For Each row As DataRow In dt7.Rows
            Next
            DataGridView2.DataSource = dt7
        Next DeptNum
    End Using
4

2 回答 2

0

由于 excel 是 Microsoft 产品,我认为这Select top是一个有效的声明。尝试将 a 添加Top 1到您的查询中。

SELECT  TOP 1
        ID,
        ARTNAME,
        NETAMOUNTTHISDAY,
        QTYSOLDTHISDAY,
        AVAILABLESTOCK

 FROM   [<%= SheetName6 %>$]
 WHERE  ID = <%= DeptNum %>  
         and QTYSOLDTHISDAY=(select max(QTYSOLDTHISDAY) 
                             from [<%= SheetName6 %>$] 
                             where ID =  <%= DeptNum %>  
                             group by ID)

如果有多个记录具有相同的QTYSOLDTHISDAY,您如何决定返回哪一个?如果您需要做出这样的决定,Order By请在外部查询上使用 an 来获取您需要在结果中返回的记录。

于 2013-04-14T00:24:19.713 回答
0

我只花了半个小时在 Excel 上搜索 SQL 的语言参考,但没有成功 - 以验证您是否可以TOP n像使用 SQL Server 一样使用。由于其他人认为它有效,我将继续假设。

使用TOP 1通常可以简化您的陈述

SELECT TOP 1
       ID, ARTNAME, NETAMOUNTTHISDAY, QTYSOLDTHISDAY, AVAILABLESTOCK
FROM   [<%= SheetName6 %>$]
WHERE  ID = <%= DeptNum %>  
ORDER  BY QTYSOLDTHISDAY DESC

在单独的子查询中查找最大值是没有意义的QTYSOLDTHISDAY。只需按降序排列并选择第一行。这使您可以从共享最大值的行中任意选择QTYSOLDTHISDAY

您可以添加更多列以ORDER BY添加一个或多个决胜局。例如,如果您有多行共享最大值QTYSOLDTHISDAY并且您想要其中最小ID的:

ORDER  BY QTYSOLDTHISDAY DESC, ID
于 2013-04-14T00:35:09.557 回答