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 ドルを超える評価があった請求のみを返すクエリが必要です。この例では、クエリは次を返す必要があります。

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 は 2012 年 3 月 1 日に 500 ドルを超えて評価され、請求番号 2 は 2012 年 1 月 1 日に 500 ドルを超えて評価され、請求番号 3 は 500 ドルを超えて評価されなかったためです。

4

6 に答える 6

5

使用できますIN

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

SQL フィドルのデモ

于 2013-07-05T15:49:35.570 に答える
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 のすべての行のすべての列が得られます。

于 2013-07-05T15:48:30.017 に答える
2

これを試して:

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

これtableがテーブルの名前です。

于 2013-07-05T15:48:51.000 に答える
2

これが解決策かもしれません

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

オプションで注文

于 2013-07-05T15:52:32.327 に答える
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()提案を比較して、実行速度に違いがあるかどうかを確認してください。

于 2013-07-05T16:00:24.817 に答える
0

あなたは使用できるはずです

  SELECT [Claim#],[Total],[ValidationDt] 
  FROM yourtable 
  WHERE [Claim#] IN (SELECT [Claim#] 
                     FROM yourtable 
                     WHERE Total >= 500)

ValidationDt のすべての値 >= 500 を返す必要があります。

于 2013-07-05T15:50:22.120 に答える