0

以下の質問についてMS Accessでクエリを探しています-

以下は、最後の行が値列に NULL である私のデータセットです。また、各 Name+Office+Person+Category に対して Max(Value) を実行することで、値を持つ複数の行を避けるためにこのデータを抽出しました

ID  Name    Office  Person  Category    Value
1   FMR    Americas Ben       Global    7
1   FMR    London   Ben       Global    5
1   FMR    London   Ben       Overall   4.2
156 Asset  London   Ben       Global    13
156 Asset   London  Ben       Overall   
157  WSR    Paris   Zen       Global      2   

私の予想される結果セットは次のとおりです-ID、名前、オフィス、人の組み合わせがグローバル/全体カテゴリの値を持っているか、単一行ではないことを示すバツ印またはインジケーターを期待しています。「文字列集約」に多少似ていることは知っています

ID  Name    Office  Person  Global  Overall
1   FMR     Americas Ben      X 
1   FMR     London   Ben      X       X
156 Asset   London   Ben      X 
157  WSR    Paris    Zen      X  

あなたの入力に感謝..

4

2 に答える 2

0

まず、一意の ID/名前/オフィスの組み合わせのリストを取得します。

SELECT DISTINCT ID, Name, Office, Person
FROM TableName

次に、各カテゴリのサブクエリを作成します。 グローバルの場合:

SELECT ID, Name, Office, Person
FROM TableName
WHERE Category="Global"

全体的に:

SELECT ID, Name, Office, Person
FROM TableName
WHERE Category="Overall"

最後に、サブクエリをメイン クエリに左結合し、式を使用して X を表示します。

SELECT DISTINCT ID, Name, Office, Person
    Iif(Global.ID Is Not Null, "X") AS IsGlobal,
    Iif(Overall.ID Is Not Null, "X") AS IsOverall
FROM (TableName
LEFT JOIN (
    SELECT ID, Name, Office, Person
    FROM TableName
    WHERE Category="Global"
) AS Global 
ON TableName.ID=Global.ID
    AND TableName.Name=Global.Name
    AND TableName.Office=Global.Office
    AND TableName.Person=Global.Person)
LEFT JOIN (
    SELECT ID, Name, Office, Person
    FROM TableName
    WHERE Category="Overall"
) AS Overall
ON TableName.ID=Overall.ID
    AND TableName.Name=Overall.Name
    AND TableName.Office=Overall.Office
    AND TableName.Person=Overall.Person

このクエリにサブクエリ全体を含めるのではなく、サブクエリを Access クエリとして保存し、保存したクエリを名前で参照する方が簡単な場合があります。

于 2012-10-10T10:03:54.353 に答える
0

私はこれで少し遊んだ。グローバルとオーバーオールの 2 つの選択クエリを作成しました

グローバル

[YourTable] WHERE Category="Global" AND Value IS NOT NULL から、ID、Name、Office、Person、Category AS Global を選択

全体

[YourTable] WHERE Category="Overall" AND Value IS NOT NULL から ID、Name、Office、Person、Category AS Overall を選択

次に、選択クエリを結合する新しいクエリを作成しました

SELECT g.ID、g.Name、g.Office、g.Person、Global、Overall FROM Global g LEFT JOIN 全体 o ON g.ID = o.ID AND g.Name = o.Name AND g.Office = o.オフィス AND g.Person = o.Person

お役に立てれば。

于 2012-10-05T16:30:50.910 に答える