2012-01-06 17 views
2

VS2005 C#およびSQL2005を使用しています。複数の列からデータを取得し、1つの列に表示する

複数の列からデータを取得し、それらをコンマで区切ってマージしたいとします。

など。私のSQLテーブルのデータUserDataを

No. | Username | Roles |

1 | Jimmy | USER, READONLY, WRITE |

No. | Username | Role 1 | Role 2 | Role 3 |

1 | Jimmy | USER | READONLY | WRITE |

データは、私は私のGridViewのGridView1で表示したいです3210

3つの列のデータをマージしてマージし、データをカンマで区切ってGridViewにリストするには、SELECT文を使用できますか?


EDIT

ありがとう私はシャークとムンによって提供される方法を使用して試してみましたが、役割列のデータが空の場合、私はカンマを削除したいと思います。 USER,,

は私が同様の変数にグループ,それは価値場合は表示されませんすることができますので、どのように知っている可能性があります:

状況は今の役割2とロール3が空の場合Roles列は次のようになりますということです空ですか?ここで

+1

null値を持つ連結列はnull値になるため、nullをチェックする必要があります。選択したユーザー名、IsNull([ロール1]、 '')+ '、' + IsNull([ロール2]、 '')+ '、' + IsNull([ロール3]、 '') UserDataからのロール – Mun

+1

@RUiHAO編集した投稿をチェックしてください。これは 'ISNULL()'を使用して目的の結果を得ます。 –

+1

@Munでは、クエリは先行するカンマまたは異なるNULL値を持つ二重カンマを挿入します。私の答えをチェックしてください。 'ISNULL()'関数でカラムとカンマ文字を組み合わせると、OPが探しているものでなければなりません。 –

答えて

1

は、SQLクエリです:

select 
    username, 
    isnull(nullif([role 1], '') + ', ', '') + 
    isnull(nullif([role 2], '') + ', ', '') + 
    isnull(nullif([role 3], ''), '') as Roles 
from UserData 

そして、あなたのグリッドビューコード用:

SqlConnection conn = new SqlConnection(YourConnectionStringHere); 
SqlCommand cmd = new SqlCommand(); 
cmd.Connection = conn; 
cmd.CommandText = 
    "select " + 
    " username, " + 
    " isnull(nullif([role 1], '') + ', ', '') + " + 
    " isnull(nullif([role 2], '') + ', ', '') + " + 
    " isnull(nullif([role 3], ''), '') as Roles " + 
    "from UserData"; 

SqlDataAdapter sda = new SqlDataAdapter(cmd); 
Datatable YourData = new DataTable(); 

try 
{ 
    sda.Fill(YourData); 

    GridView1.DataSource = YourData; 
    GridView1.Bind(); 
} 
catch 
{ 
    sda.Dispose(); 
    // handle your error 
} 
+0

こんにちは、私はメソッドを実装しています。しかし、値が空であれば '、'を取り除く方法がありますか?私はロール1,2,3が空になるたびにデータの表示に問題があります。 '、'も表示されます – gymcode

+0

@RUiHAOこれはまさにそのクエリが行うことです。それは '[role x] + '、''の組み合わせをチェックします。もしそれが 'NULL'ならば(' [role x] 'が' NULL'ならば)、それは不要なカンマを表示しません。 –

+0

@RUiHAO "空"と言うとき、どういう意味ですか? 'NULL'か空文字列(' '' ')??それらは2つの全く異なるものです。上記の解決策は、空の文字列( '''')ではなく、 'NULL'値に対するものです。 –

2

あなたは、ストアドプロシージャでこれを行う必要があり、そのストアドプロシージャにGridViewコントロールをバインドします

SELECT No., Username, CAST(Role1 AS varchar(1024)+ ', ' + Role2 + ', ' + Role3) 
関連する問題