2012-01-10 3 views
2

나는이는 SQL 서버에서 XML의 노드에서 최대 값을 얻기 2008

<variable> 
    <historicDates> 
    <item> 
     <date>2012/01/13</date> 
     <type>submitted</type> 
    </item> 
    <item> 
     <date>2012/01/12</date> 
     <type>required</type> 
    </item> 
    <item> 
     <date>2012/01/11</date> 
     <type>required</type> 
    </item> 
    </historicDates> 
</variable> 

같은 일부 XML은 내가 유형이 필요 일치 한 최대 날짜를 얻기 위해 SQL 문을 작성하는 것을 시도하고있다. 문제를 복합화하려면 열이 nvarchar (최대)이므로 시작할 때까지 XML로 변환해야한다는 것을 알고 있습니다.

나는 교차 적용을 이해하려고 시도했지만 작동시키지 못했습니다. 어떤 도움을 주시면 감사하겠습니다.

답변

3

은 당신의 XML은 변수에 @xml 이름이 가정하면 : SQL Server 2008을 표시하기 때문에

SELECT MAX(t.ItemDate) 
    FROM (SELECT Tbl.Col.value('date[1]', 'datetime') AS ItemDate, 
       Tbl.Col.value('type[1]', 'varchar(20)') AS ItemType 
       FROM @xml.nodes('//variable/historicDates/item') Tbl(Col)) t 
    WHERE t.ItemType = 'required' 

, 당신은 또한 여기에 CTE를 사용할 수 있습니다

WITH cteXMLtoTable AS (
    SELECT Tbl.Col.value('date[1]', 'datetime') as ItemDate, 
      Tbl.Col.value('type[1]', 'varchar(20)') as ItemType 
     FROM @xml.nodes('//variable/historicDates/item') Tbl(Col) 
) 
SELECT MAX(ItemDate) 
    FROM cteXMLtoTable 
    WHERE ItemType = 'required' 
+0

감사합니다 조 - 당신의 남자! 하나 더보기 -이 뷰를 위해이 ddl을 사용하려고하기 때문에 @ xml 변수가 없습니다. 그냥 열 라인 캐스트 (XML로 main.data) 참조하는 방법이있다. 노드 ...? –

+0

그것이 어떻게 작동하는지 잘 모르겠습니다. 이 뷰 스크립트를 사용하여 연결된 행에 대한 값을 반환 할 및 내 ddl 스크립트에서 @ xml 내 nvarchar (최대) 열을 선택하고 캐스팅 할 수 없습니다. 내가 놓친 게 있니? –

관련 문제