2016-06-20 11 views
0

私は行が表示されますが、テーブルを作成しようとしている同じmodel_numberを持っているし、それらをマージするが、最初のマージして表示するテーブルデータ

に第二列から場所を追加year_introducedものがある場合

は、だから私は今、この権利

archive_id model_number year_introduced location 
1001   B12    2012    SKID 43 
1002   B12    2012    SKID 47 
1003   B12    2012    SKID 41 
1004   B12    2012    SKID 56 

のように見えるテーブルを持っていますが、私はそれは私がC#とAを使用してデータを表示しています。この

archive_id model_number year_introduced location 
1001   B12    2012    SKID 43, SKID 47, SKID 41, SKID 56 

に見えるようにしたいですSP.NETなので、行をマージするようにクエリを調整するか、C#を使ってDataTableにマージしますか?

ここではデータを表示しています情報ボタンをクリックすると、すべてのページが表示されます)

foreach (DataRow dataRow in ds.Tables[0].Rows) 
{ 
    yearHead.InnerText = decade.ToString() + "'s"; 
    TableRow row = new TableRow(); 
    row.ID = "rows" + x; 
    row.Attributes.Add("class", "tblRow"); 

    TableCell cell = new TableCell(); 
    cell.Attributes.Add("class", "cell"); 
    cell.ID = "product_name" + x; 
    cell.Text = dataRow["PRODUCT_NAME"].ToString(); 
    row.Cells.Add(cell); 

    cell = new TableCell(); 
    cell.ID = "model_number" + x; 
    cell.Text = dataRow["MODEL_NUMBER"].ToString(); 
    row.Cells.Add(cell); 

    cell = new TableCell(); 
    cell.ID = "years" + x; 
    if (dataRow["YEAR_INTRODUCED"] != null) 
    { 
     cell.Text = dataRow["YEAR_INTRODUCED"].ToString(); 
     row.Cells.Add(cell); 
    } 
    else 
    { 
     cell.Text = "Unknown Start Date"; 
     row.Cells.Add(cell); 
    } 

    cell = new TableCell(); 
    cell.ID = "more_info" + x; 

    Button moreInfo = new Button(); 
    moreInfo.Attributes.Add("runat", "server"); 
    moreInfo.UseSubmitBehavior = false; 
    moreInfo.CommandName = "moreInfoClicked"; 
    moreInfo.Text = "Details"; 
    moreInfo.ID = "info_" + dataRow["ARCHIVE_ID_NUMBER"].ToString(); 
    moreInfo.CommandName = x.ToString(); 
    moreInfo.CommandArgument = dataRow["ARCHIVE_ID_NUMBER"].ToString(); 
    moreInfo.ControlStyle.CssClass = "moreInfoButton"; 

    cell.Controls.Add(moreInfo); 
    row.Cells.Add(cell); 

    product.Rows.Add(row); 
    x += 1; 
} 

答えて

0

私の意見では、結果をマージするのが最も効率的です。

+0

archive_idが主キーであるので、それぞれが一箇所だけを持っています –

+0

その上で、今、私のクエリは+十年+ @ "ARCHIVE_DECADE_TBL DECADE_ SELECT * FROM" @このCMD =のように見える "PRODUCT_NAME BY><= @の十年とPRODUCT_LINE = @ラインと量がnullと量ではありません0 ORDER;";私は同じ年とモデル番号 –

+0

[OK]を、私は今理解を持っているもののグループにGROUP BYまたは任意の他の用語を追加する必要がありますので、それを調整することによって、私は意味します。私は私の答えを編集しました。テーブルからすべてを選択してC#で結果をマージするのが最も効率的です。私が間違っていないならば、グループはまだ同じ行に結果を返しません。 – Mohanad

0

最も簡単な方法は、SQLサーバー側で列の値のintリストを変換し、結果の行セット(データテーブル)をGridViewまたはListViewにバインドすることです。

select distinct model_number, year_introduced 
,stuff((select ', '+location as [text()] 
     from tbl t1 
      where t1.year_introduced = t.year_introduced 
      and t1.model_number = t.model_number for xml path('')),1,1,'') lst 
from tbl t 

各値は異なるlocationを生成するためarchive_idがここに含まれないことに注意してください。あなたはarchive_id列に同様のトリックを適用するか、locationarchive_idを組み合わせることができます。あなたが質問で指定しても、データが場所欄にコンマによって結合されるように、これはarchieve_idています

select ', ' + cast(archive_id as varchar) + ': ' + location as [text()]... 
0

SELECT min([archive_id]) as archive_id,[model_number],[year_introduced], STUFF(( SELECT ', ' + CAST([location] AS VARCHAR(MAX)) FROM [Test] WHERE ([model_number] = Results.[model_number] and [year_introduced]= Results.[year_introduced]) FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)') ,1,2,'') AS Location FROM [Test] Results GROUP BY [model_number],[year_introduced]

関連する問題