2014-04-01 2 views
0

에 의해 그룹 내에서 항목을 포장 I가 잘 지금까지 작동 다음이 포함 된 저장 프로 시저 :SQL 서버 : 선택

SELECT  cat, 
      COUNT(*) AS groupCount 
FROM  Log_PE 
WHERE  CONVERT(DATE, dateEsc, 120) >= 
       CONVERT(DATE, 
       CONVERT(VARCHAR(6), DATEADD(month, -1, GETDATE()), 112) 
       + '01', 112) 
GROUP BY cat 
ORDER BY groupCount desc, cat 
FOR XML PATH('ranking'), ELEMENTS, TYPE 

현재 XML (예) :

<ranking> 
    <cat>2</cat> 
    <groupCount>84</groupCount> 
    <cat>5</cat> 
    <groupCount>27</groupCount> 
    <cat>9</cat> 
    <groupCount>19</groupCount> 
</ranking> 

을 대신 다음을 얻고 싶습니다 :

<ranking> 
    <itemGroup> 
     <cat>2</cat> 
     <groupCount>84</groupCount> 
    </itemGroup> 
    <itemGroup> 
     <cat>5</cat> 
     <groupCount>27</groupCount> 
    </itemGroup> 
    <itemGroup> 
     <cat>9</cat> 
     <groupCount>19</groupCount> 
    <itemGroup> 
</ranking> 

"cat"과 "groupCount"의 각 쌍이 결과 XML 문자열의 "itemGroup"내에 개별적으로 래핑되는 것을 어떻게 얻을 수 있습니까?

Tim과 관련하여 많은 감사를드립니다.

답변

2

SQL Fiddle

MS SQL 서버 2012 스키마 설정 : 1

create table Log_PE 
(
    cat int, 
    dateEsc datetime 
) 

insert into Log_PE values(2, '20150227') 
insert into Log_PE values(2, '20150227') 
insert into Log_PE values(2, '20150227') 
insert into Log_PE values(5, '20150227') 
insert into Log_PE values(5, '20150227') 

검색어 :

select cat, 
     count(*) as groupCount 
from Log_PE 
where dateEsc >= dateadd(month, datediff(month, 0, getdate()) - 1, 0) 
group by cat 
order by groupCount desc, cat 
for xml path('itemGroup'), root('ranking'), type 

Results :

<ranking> 
    <itemGroup> 
    <cat>2</cat> 
    <groupCount>3</groupCount> 
    </itemGroup> 
    <itemGroup> 
    <cat>5</cat> 
    <groupCount>2</groupCount> 
    </itemGroup> 
</ranking> 
+2

그건 속임수입니다 - 정말 고마워요! – user2571510