2014-02-11 2 views
0

그리드의 데이터 아래에 표시 중입니다.2 행을 1 행으로 바꿈

ID  Name Address 
----------------------------------------- 
1  Mike  100, Francis Dr, PA 
1  Mike  2, Richmond Street, PA 
2  John  45, Francis Dr, PA 
2  John  55, Richmond Street, PA 
3  Peter 23, Castle Street, PA 

가 어떻게 Telerik 그리드 또는 같은 LINQ 쿼리 및 디스플레이의 새로운 열로 주소 2 트랜스 수 -

ID  Name Home-Address   Office-Address 
------------------------------------------------------------------------------ 
1  Mike  100, Francis Dr, PA  2, Richmond Street, PA 
2  John  45, Francis Dr, PA  55, Richmond Street, PA 
3  Peter 23, Castle Street, PA 
+0

어떤 주소가 집 또는 사무실인지 어떻게 알 수 있습니까? (관계형 DB 테이블에서는 순서를 사용할 수 없습니다.) 일단 그렇게하면, 'GROUP BY'로 할 수 있습니다. –

+0

데이터의 출처는 어디입니까? – Andy

+0

실제로 시나리오가 다릅니다. 주소 1과 주소 1로 간주 할 수 있습니다. 감사합니다 – user1979284

답변

0

본인의 첫 번째 주소는 집 주소이고 두 번째 주소는 사무실 주소이며 직접 테이블이 있다고 가정합니다. 이 경우 SP를 작성하여 telerik 데이터 소스에 할당하십시오.

select t1.ID, t1.Name, t1.Home_Address, t2.Office_Address 
(select ID,Name,Address as Home_Address 
from 
(select ID,Name,Address,row_number() over (partition by ID Order by ID) rnum 
from table_name) a 
where a.rnum=1) t1 
left join 
(select ID,Name,Address as Office_Address from 
(select ID,Name,Address,row_number() over (partition by ID Order by ID) rnum 
from table_name) b 
where b.rnum=2) t2 
on t1.ID=t2.ID 
+0

그는 SQL을 요청하지 않았으며 행 번호()에'()'가 누락되었습니다. – Hogan

+0

row_number()가 둘 사이에서 바뀔 수 있기 때문에 실제로 여기에 'WITH' 또는 임시 테이블을 사용하려고합니다. ID는 고유하지 않습니다. – Hogan

+0

감사합니다. SNathan. 귀하의 쿼리에서 예상되는 결과가 나타납니다. 그러나 우리는 프로젝트에서 SP를 사용하지 않습니다. 보기를 사용할 수는 있지만이 스크립트는 볼 수 없습니다. 이 일을하는 다른 방법? 감사합니다 – user1979284

1

이는 같은 ADDR1 및 ADDR2 그것을 수행하는 방법을 보여줍니다 코멘트는 당신이 당신이 데이터를 제시 할 때 순서를 알 수 없기 때문에 어떤 것이 일하고 어떤 것이 집인지를 알 수 없다고 말합니다.

void Main() 
{ 
    List<record> data = new List<record> { 
    new record() { ID = 1, Name = "Mike", Address = "100, Francis Dr, PA" }, 
    new record() { ID = 1, Name = "Mike", Address = "2, Richmond Street, PA" }, 
    new record() { ID = 2, Name = "John", Address = "45, Francis Dr, PA" }, 
    new record() { ID = 2, Name = "John", Address = "55, Richmond Street, PA" }, 
    new record() { ID = 3, Name = "Peter", Address = "23, Castle Street, PA" } }; 

    var result 
    = data.GroupBy((x) => new { ID =x.ID, Name = x.Name }) 
     .Select((x) => 
      new { ID = x.Key.ID, 
       Name = x.Key.Name, 
       Addr1 = x.Take(1).Select((z) => z.Address).FirstOrDefault(), 
       Addr2 = x.Skip(1).Select((z) => z.Address).FirstOrDefault()}); 

} 

// Define other methods and classes here 
public class record 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string Address { get; set; } 
} 

얇은 열에 잘 들여 쓰게 들여 쓰여졌습니다. LinqPad에서

결과 :

enter image description here

는 또한이 함께 번지 기능 라인을 대체하여 구분 된 목록을 만들 수 :

enter image description here : 같을 것이다

Alist = string.Join("||",x.Select((z) => z.Address))}); 

+0

에서오고 있습니다 오류가 발생합니다 - x는 신고되지 않았습니다. 나는 Vb.net과 Linq를 사용하고있다. 죄송합니다 나는 VB와 linq에 새로운입니다. 고마워 호간. – user1979284

+0

정확한 오류 msg - 오류 'x'이 선언되지 않았습니다. 보호 수준으로 인해 액세스 할 수 없습니다. – user1979284

+0

@ user1979284 - 오타가 있으면 위의 코드가 컴파일되어 LinqPad에서 올바르게 실행됩니다. 오타가 보이지 않으면 코드를 게시하거나 이메일 (내 프로필의 이메일 주소)로 보내주십시오. – Hogan

관련 문제