2011-07-13 12 views
1
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を使用しています。XMLデータでグループ化するにはどうすればいいですか?

答えて

1

クロス・アプライを使用してXMLをサブクエリで問い合せ、フィールド・リストおよびグループ・バイ・サブクエリのサブクエリから戻された値を使用できます。

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 

結果:

Value 
----- 
1 
2 
3 
関連する問題