2013-07-05 109 views
1
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美元的索賠。在這個例子中,查詢應該返回沒有主鍵的MS Access查詢表

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已於12年3月1日估價超過$ 500,要求#2估價超過$ 500的12年1月1日,並要求#3從來沒有估價超過500美元。

+2

爲什麼當標題和文本說MS SQL的標籤MS訪問? –

+0

@丹對不起,那東西總是讓我困惑。我認爲他們是同樣的事情。我表現出我的經驗不足。 – Ben

回答

5

您可以使用IN

SELECT * 
FROM Table1 
WHERE Claim IN (SELECT Claim 
       FROM Table1 
       WHERE Total > 500) 

Sql Fiddle Demo

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。

+0

爲什麼downvote? –

+0

這將不會在查詢中看到該表應該返回 – Trikaldarshi

+0

@Photon,Ben說「我需要一個只返回索賠的查詢」,所以,我只返回了索賠,但我明白了你的觀點。 –

2
索賠號碼

試試這個:

Select * from table where claim in (Select claim from table where total > 500) 

這裏table是你的表的名稱。

0

您應該能夠使用

​​

應該返回所有值> = 500的任何ValidationDt。

2

這可能是解決

SELECT distinct * 
    FROM YourTableName 
    WHERE claim# IN (SELECT DISTINCT claim# 
        FROM YourTableName 
        WHERE total > 500) 
    ORDER BY 3; 

可選順序由

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()建議,看看你是否注意到在執行速度的任何差異。

+0

我完全預計這個查詢比其他人執行得更好,特別是因爲我的真實表格有大約400,000行。但是,事實證明IN()子句比這個INNER JOIN方法明顯更快。無論如何給你一個upVote。 – Ben

+0

我敢打賭,查詢計劃顯示選擇不同的排序有負面影響 –