0

我在这里使用 SQL 视图有一个简单的问题。我现在似乎无法弄清楚。

  • 我有 2 张桌子,TableA 和 TableB。
  • 我想检索 TableA 中的 FieldA 和 TableB 中的 FieldB。
  • 这两个表使用 INNER JOIN 链接。
  • 我只想要 TableA.FieldA 不同的行。
  • 返回的值应该是 TableB.FieldB 中的前 10 项

简单地使用 SELECT DISTINCT 似乎是使用这两个字段的组合来确定区别。

有任何想法吗?

这是当前返回所有行的 SQL 的模拟:

SELECT dbo.TableA.FieldA, dbo.TableB.FieldB
FROM dbo.TableA INNER JOIN dbo.TableB ON dbo.TableA.ID = dbo.TableB.TableAID

此标准查询返回的数据示例如下:

FieldA  FieldB
John    78
John    21
Claire  18
Sam     16
John    25
Claire  48
Paul    53

我希望从查询中返回的是:

John    78
Paul    53
Claire  48
Sam     16

**已编辑以尝试使事情更清晰并包括缺失的信息。

4

3 回答 3

1

根据您的回答,我认为您正在尝试做的是:

对 TableB 中的 FieldB 求和,然后将其与 TableA 连接起来。

SELECT   TableA.FieldA,
         tmp.SUMFieldB
FROM     TableA
         INNER JOIN
                  (SELECT  TableAID,
                           SUM(FieldB) AS SUMFieldB
                  FROM     TableB
                  GROUP BY FieldA
                  ORDER BY SUMFieldB DESC
                  ) AS tmp
         ON       TableA.ID = tmp.TableAID
ORDER BY tmp.SUMFieldB DESC
于 2009-03-08T04:34:21.543 回答
1

如果基于连接的表 b 中的字段 A 有两个不同的值,您怎么知道要使用哪一个?

你可以试试这个,但它可能不会选择你想要的 b 值

SELECT dbo.TableA.FieldA, max(dbo.TableB.FieldA)
FROM dbo.TableA INNER JOIN dbo.TableB ON dbo.TableA.SomeID = dbo.TableB.SomeID
GROUP BY dbo.TableA.FieldA
于 2009-03-06T14:50:03.607 回答
0

这个怎么样?

SELECT TableA.FieldA,
       tmp.FieldB
FROM   TableA
       INNER JOIN
              (SELECT  TableAID,
                       FieldB
              FROM     TableB
              GROUP BY FieldA
              ORDER BY FieldB DESC
              ) AS tmp
       ON     TableA.ID = tmp.TableAID
ORDER BY tmp.FieldB DESC
于 2009-03-06T15:34:25.217 回答