2016-06-20 8 views
0

I 행을 표시하지만 테이블을 만들려고 노력하고있는 같은 모델 _이 다음 병합하지만 첫 번째병합 및 표시 테이블 데이터

에 두 번째 행에서 위치를 추가 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 번호와를 사용하여 데이터를 표시하고이

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

내 의견으로는 결과를 병합 C 번호를 사용하는 것이 가장 효율적인 것에 나타납니다.

+0

archive_id는 기본 키입니다 각각의 하나 하나 개의 위치가 그것에 –

+0

지금 내 쿼리는 다음과 같습니다. cmd = @ "Select * ARCHIVE_DECADE_TBL WHERE DECADE_"+ decade + @ "= @ decade AND PRODUCT_LINE = @ Line AND QUANTITY는 null이 아니며 QUANTITY는> 0 ORDER BY PRODUCT_NAME; 그래서 그것을 조정하여 같은 연도와 모델 번호를 가진 그룹을 그룹으로 또는 다른 용어로 그룹을 추가해야합니까? –

+0

이제 알겠습니다. 나는 내 대답을 편집했다. 테이블에서 모든 것을 간단히 선택하고 C#으로 결과를 병합하는 것이 가장 효율적입니다. 그룹을 잘못 입력하지 않은 경우에도 같은 행에 결과가 표시되지 않습니다. – Mohanad

0

가장 쉬운 방법은 SQL 서버 측의 열 값 목록을 변환 한 다음 결과 행 집합 (데이터 테이블)을 GridView 또는 ListView에 바인딩하는 것입니다. 각 값이 다른 location을 생산하기 때문에 archive_id이 여기에 포함 할 수없는

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 

참고. 비슷한 트릭을 archive_id 열에 적용하거나 archive_idlocation과 결합 할 수 있습니다. 이 질문에 지정된 또한 데이터가 위치 열에서 쉼표 (,)로 결합됩니다으로이 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]

관련 문제