首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对以下代码进行分组/在XML数据中进行分组

如何对以下代码进行分组/在XML数据中进行分组
EN

Stack Overflow用户
提问于 2011-07-13 08:24:38
回答 1查看 95关注 0票数 1
代码语言:javascript
复制
select               first name
              ,last name
               ,employeeID
                ,CASE
                     WHEN CONVERT(xml,detail).value('count(//education/item)','nvarchar(50)')=0 AND
                      CONVERT(xml,detail).value('(//preventive/itemValue/text())[1]','nvarchar(50)') LIKE '%Employee refuses to participate %' THEN
                           'AAA-1'

                       WHEN CONVERT(xml,detail).value('count(//education/item)','nvarchar(50)') =0 AND
                        CONVERT(xml,detail).value('count(//preventive/itemValue)','nvarchar(50)')=0 THEN
                            'AAA-2'
                        ELSE
                             'AAA-3'
                        END val

                        ,Start Date
                        ,End Date

FROM (HAS MULTIPLE JOINS HERE & CONDITION )



GROUP BY       first name
              ,last name
               ,employeeID
                ,CASE
                     WHEN CONVERT(xml,detail).value('count(//education/item)','nvarchar(50)')=0 AND
                      CONVERT(xml,detail).value('(//preventive/itemValue/text())[1]','nvarchar(50)') LIKE '%Employee refuses to participate %' THEN
                           'AAA-1'

                       WHEN CONVERT(xml,detail).value('count(//education/item)','nvarchar(50)') =0 AND
                        CONVERT(xml,detail).value('count(//preventive/itemValue)','nvarchar(50)')=0 THEN
                            'AAA-2'
                        ELSE
                             'AAA-3'
                        END 

                        ,Start Date
                        ,End Date

我的代码执行得非常好,但是当我编写group by子句时,它抛出一个错误,指出XML数据类型不能分组。我知道我们可以通过用户定义的函数来实现。谁能让我知道如何完成这项任务。我需要在代码中使用group by子句。我使用的是SQL Server 2005/2008。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-13 12:00:31

可以使用cross apply在子查询中查询XML,然后在字段列表和group by子句中使用子查询返回的值。

代码语言:javascript
复制
declare @T table(XMLCol xml)

insert into @T values
('<root>1</root>'),
('<root>2</root>'),
('<root>3</root>'),
('<root>3</root>')

select X.Value
from @T
  cross apply (select T.N.value('.', 'int')
               from XMLCol.nodes('root') as T(N)) as X(Value)
group by X.Value

结果:

代码语言:javascript
复制
Value
-----
1
2
3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6672790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档