2014-04-01 80 views
0

包组内的项目我有一个包含其工作正常,到目前为止以下存储过程:(例子)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 Server 2012的架构设置

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') 

查询1

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