1

SQLまたはms-accessの形式でこのようなテーブルがあります。

サンプル

ID  ID2 name    class   example
1   10  John    main    
2   10          
3   10          
4   10                  ~ is look at me.
5   20  Candice main    
6   20          
7   20                  ~ is in Japan.
8   20                  ~ is reading a book.
9   20          

例fields(A)の "〜"を、Aと同じID2およびclass="main"を持つnameフィールドの値に置き換える必要があります。結合構文を作成するにはどうすればよいですか?

結果

ID  ID2 name    class   example
1   10  John    main    
2   10          
3   10          
4   10                  John is look at me.
5   20  Candice main    
6   20          
7   20                  Candice is in Japan.
8   20                  Candice is reading a book.
9   20          
4

3 に答える 3

0
select m.[name] & replace(b.example, "~", "") as combined
from sample as m
inner join sample as b on m.id2 = b.id2
where m.[class] = "main"
and b.example not null 
于 2012-09-17T13:17:17.127 に答える
0

データは(何らかの理由で)ひどく構造化されていますが、質問に答えるには、次のようにすることができます。

SELECT 
   T1.[ID],
   T1.[ID2],
   T1.[name],
   T1.[class],
   iif(not isnull(T1.[Example]) and not isnull(T2.[Name]), Replace(T1.[Example], "~", T2.[Name]), null) As [Example]
FROM
   Data T1
LEFT JOIN Data T2 ON (T1.[ID2] = T2.[ID2] AND T2.[Class]="main")

これは、ID2 の一意の値ごとに class=main を持つレコードが 1 つしかないという前提に基づいています (そうしないと、行が繰り返されます)。

JOIN を使用する必要がない場合、代替手段は次のとおりです。

SELECT 
   [ID],
   [ID2],
   [name],
   [class],
   (iif(not isnull([example]), Replace([example], "~", nz((select top 1 [name] from Data T2 where T2.ID2 = T1.ID2 and T2.[class]="main" order by T2.[ID2]),"")),null)) as [ExampleNew]
FROM Data T1
于 2016-02-01T08:48:14.577 に答える
0

あなたのテーブル構成は正しくないと思います。

テーブルで値が繰り返される ID フィールドを使用しているという事実は、データベース設計がやや悪いことを示しています。

データを 2 つのテーブル (例を含むテーブルと「メイン」クラスを含むテーブル) に分割すると、おそらくより良い結果が得られると思います。次に、ID2 フィールドを使用した単純な結合により、両方のテーブルを結合できます。

于 2012-09-17T13:15:43.600 に答える