【问题标题】:MS Access Query (two tables only)MS Access 查询(仅两个表)
【发布时间】:2013-09-12 02:02:55
【问题描述】:

我有两张桌子:

**T1**
ID |Transaction| amount |
1  |trans1     | 97     |
1  |trans2     | 22     |
2  |trans7     | 98     |


**T2** 
ID |description|spec|
1  |Item 1     |text|
2  |Item 2     |zip |

注意:两个表中的 ID 列是相同的。但是,表 T1 中的 ID 不是唯一的。

我需要查询以从表中检索数据,但只检索数量最多的行(表 T1)。示例结果:

ID|description|spec|transaction|amount|
1 |item1      |text| trans1    |  97  | 
2 |item2      |zip | trans7    |  98  | 

帮助

谢谢。

【问题讨论】:

  • 您的示例结果不正确,是吗?它显示两条记录的 ID = 1。
  • ye 它还显示了来自 T1 的混合行,即 trans2,97
  • 对不起那些家伙;凌晨 2 点...感谢您对细节的关注...

标签: sql ms-access subquery


【解决方案1】:

您应该使用此查询为 T2 中的每个 ID 获取一行

SELECT ID, MAX(AMOUNT) AS AMT FROM T1 GROUP BY ID

然后将第一个表加入其中并选择您需要的所有内容。所以它看起来像这样:

SELECT T2.ID,
  description,
  spec,
  transaction ,
  AMT
FROM T2
JOIN
  (SELECT ID, MAX(AMOUNT) AS AMT FROM T1 GROUP BY ID
  ) T3
ON T3.ID=T2.ID;

注意:我使用的是 Oracle,在您的数据库中,您可能需要修改查询以解决关键字冲突。

【讨论】:

  • 它不起作用;找不到现场交易。我了解您如何获取所有列,但实际上如何从 T1 获取我未包含在示例中的事务或任何其他列。知道阿里吗?谢谢!
  • 由于 transaction 字段没有出现在 T2 或 T3 中,您需要进一步修改。
  • 如果您想在 T1 上获得更多列,您应该将它们添加到上面的第一个 sql 语句中。即 SELECT ID, MAX(AMOUNT) AS AMT, column2, column3, ..... FROM T1 GROUP BY ID
【解决方案2】:

尝试以下查询:

SELECT ID, description, spec, `transaction` , amt
FROM T2
JOIN
  (SELECT ID, `transaction`, MAX(amount) AS amt FROM T1 GROUP BY ID) AS T3
ON T3.ID=T2.ID

小心,因为 transaction 可能是保留关键字。您总是可以用刻度线括起来(如上)

【讨论】:

  • 这似乎不正确。此查询将引发错误:SELECT ID, MAX(amount) as amt FROM T1
  • 是的,好的,添加了GROUP BY 子句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多