从多个表中选择一个具有不同值的表

时间:2009-03-06 14:46:33

标签: sql database select distinct

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

  • 我有2个表,TableA和TableB。
  • 我想在TableA中检索FieldA 表B中的FieldB和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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

根据您的answer我认为您要做的是:

在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

答案 2 :(得分: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