Claim# Total ValuationDt
1 100 1/1/12
2 550 1/1/12
1 2000 3/1/12
2 100 4/1/12
1 2100 8/1/12
3 200 8/1/12
3 250 11/1/12
使用MS Access,我需要一个查询,该查询仅返回在该声明的生命周期中的某个时间点已被评估超过500美元的声明。在此示例中,查询应返回
Claim# Total ValuationDt
1 100 1/1/12
2 550 1/1/12
1 2000 3/1/12
2 100 4/1/12
1 2100 8/1/12
因为索赔#1在3/1/12被评估超过500美元,索赔#2在1/1/12被评估为超过500美元,而索赔#3从未被评估超过500美元。
答案 0 :(得分:5)
您可以使用IN
:
SELECT *
FROM Table1
WHERE Claim IN (SELECT Claim
FROM Table1
WHERE Total > 500)
答案 1 :(得分:2)
这应该有效
Select DISTINCT Claim FROM yourtable Where Total > 500
编辑:
如果我的初始答案不符合您的要求,那么您可以使用子查询。子查询是查询中的查询(嵌套查询)。我们必须这样做的原因是因为如果你使用类似
的东西Select * FROM yourtable Where Total > 500
然后结果集只会是索赔总数高于500的那些时刻,但它不会表示其小于或等于500的其他时刻。
因此,正如其他人所说,您使用的子查询如下:
SELECT *
FROM Table1
WHERE Claim IN (SELECT Claim
FROM Table1
WHERE Total > 500)
注意:看到IN关键字后面有一个查询,所以我们有嵌套查询(或者你喜欢的子查询)。
为什么会这样?好吧,因为:
SELECT Claim
FROM Table1
WHERE Total > 500
将在某个时间点返回总数大于500的每项索赔(仅索赔的编号)。因此,此查询将返回1和2.如果在原始查询中替换它,则得到:
SELECT *
FROM Table1
WHERE Claim IN (1, 2)
这将为您提供索赔号等于1或2的每一行的每一列。
答案 2 :(得分:2)
试试这个:
Select * from table where claim in (Select claim from table where total > 500)
此处table
是您表格的名称。
答案 3 :(得分:2)
这可能是解决方案
SELECT distinct *
FROM YourTableName
WHERE claim# IN (SELECT DISTINCT claim#
FROM YourTableName
WHERE total > 500)
ORDER BY 3;
可选择按
排序答案 4 :(得分:1)
您可以确定哪些[Claim#]
值符合您的条件......
SELECT DISTINCT [Claim#]
FROM YourTable
WHERE [Total] > 500
如果这是正确的,请将其用作您INNER JOIN
到您的表的子查询,以将结果集限制为仅这些声明。
SELECT y.[Claim#], y.[Total], y.[ValidationDt]
FROM YourTable AS y
INNER JOIN
(
SELECT DISTINCT [Claim#]
FROM YourTable
WHERE [Total] > 500
) AS sub
ON y.[Claim#] = sub.[Claim#];
将此方法与IN()
建议进行比较,看看您是否注意到执行速度有任何差异。
答案 5 :(得分:0)
你应该可以使用
SELECT [Claim#],[Total],[ValidationDt]
FROM yourtable
WHERE [Claim#] IN (SELECT [Claim#]
FROM yourtable
WHERE Total >= 500)
对于任何ValidationDt,都应返回所有值> = 500。