2011-02-04 5 views
0

시간당 하루 공항에 오는 사람들의 기록을 그룹화하려고합니다. 그래서 기본적으로 저는 특정 공항에서 매 시간마다 많은 사람들이 방문하기를 바랍니다. 아래 코드는 그것을위한 것입니다.프로젝션 쿼리에서 group by 절을 사용하는 방법

string ArrDate = 
       String.Format("LTRIM(STR(MONTH({0}))) + '/' + LTRIM(STR(DAY({0}))) + '/' + LTRIM(STR(YEAR({0})))", "DestinationDatetime"); 

      string ArrTime= 
       String.Format("rtrim(datepart(hh, DestinationDatetime)) +' Hour'", "DestinationDatetime"); 

      Template.Criteria. 
       SetProjection(
         Projections.ProjectionList() 
         .Add(Projections.Count("ID"), "ACount") 
         .Add(Projections.SqlGroupProjection(ArrDate + " as DateVal", ArrDate 
           new string[] { "DateVal" }, new IType[] { NHibernateUtil.String })) 
         .Add(Projections.SqlGroupProjection(ArrTime + " as TimeVal", ArrTime, 
           new string[] { "TimeVal" }, new IType[] { NHibernateUtil.String })) 
         .Add(Projections.GroupProperty("Airport"), "APort")); 

      Template.Criteria.SetResultTransformer(Transformers.AliasToEntityMap); 

지금, 위의 쿼리는 그래서,

Date Airport Time  Count 
12/16 ORD  13 Hour  5 
12/16 ORD  17 Hour  6 
12/16 MWK  10 Hour  7 

내가 같은 레코드를 표시하는 쿼리를하려면, 아래의 방법으로 나에게

Date Airport Time  Count 
    12/16 ORD  1 pm  5 
        4pm   6 
      MWK  10 am  7 

을 기록을 제공하는 날짜와 공항 반복하지 말라. 1-2 시간, 2-3am 등등 ...

+0

왜 사실 이후에 데이터를 조작하지 않습니까? 이것은 nhibernate 문제처럼 보이지 않습니다. – Vadim

+0

나는 많은 공항이 있기 때문에 알고 있지만 프로젝션 쿼리를 사용하면 주변 환경이 조금 복잡해 질 수 있다고 생각했다. – developer

답변

1

nHibernate가이 작업을 수행 할 수 있다고하더라도, 이것은 데이터베이스 관련 사항이 아닙니다. 프레젠테이션 관심사. 중복 된 날짜를 무시하는 논리를 프레젠테이션에 추가해야합니다.

asp.net, asp.net MVC, WPF 또는 winforms 프로젝트입니까?

+0

이것은 WPF 프로젝트이다 .. – developer

+0

오, 할 수있다; WPF로 dedups 내 것은 아니야, 당신은 여기에 데이터의 반복 행을 supressing 가서 묻는 스택 오버플로에 대한 새로운 질문을 할 수 있습니다. – Rippo