2

このトピックについて2つのSTUFF質問があります。

最初の質問はSTUFFSQLServerの機能です。2番目の質問はSTUFF、Oracle(8i)の関数についてです。

,質問1:詰め込みたい列からを削除するにはどうすればよいですか?

例、与えられた表:

ID      Country     Payment     Product
12345       USA     Cash        Red wine
12345       USA     Cash    
12345       USA     Cash

このスクリプトを使用すると、次のようになります。

select distinct Country, Payment,
stuff(isnull((select ', ' + x.Product from #temp x where x.ID = t.ID
group by x.Product for xml path ('')), ''), 1, 2, '') as Product


ID      Country     Payment     Product
12345   USA         Cash       , Red wine

結果を削除して表示のみを表示するにはどうすればよいRed wineですか(コンマ(、)を削除しますか?)

注意:私はこのSTUFF関数を書きませんでした。それはOMGポニーという名前の誰かによって書かれています。

質問2:質問1と同じですが、構文はOracleにあります。

select distinct ID, Country, Payment, WM_CONCAT(Product) AS Products
from
(
select distinct ID, Country, Payment, Product
from temp table
)x
group by ID, Country, Payment

結果だけを表示したいRed wine(コンマ(、)を削除)。

4

1 に答える 1

3

質問 1: 回答の SQL Server 部分に関する限り、Product フィールドに空の文字列があるように見えます。空の文字列がない場合、それらは null ではありません。したがって、次を使用できます。and (product != '' and product is not null)あなたの部分に行を追加しましたStuff()。余分なコンマが削除されます。

select distinct Country, Payment,
    stuff(isnull((select ', ' + x.Product 
                    from test x 
                    where x.ID = t.ID 
                      and (product != '' and product is not null)
                    group by x.Product for xml path ('')), ''), 1, 2, '') as Product
from test t

デモで SQL Fiddle を参照してください

質問 2: Oracle 8i バージョンにアクセスできませんが、空の文字列で値を除外すると、カンマが消えると思います。

于 2012-08-15T14:43:32.893 に答える