2014-01-29 157 views
1

我是SQL xml操作的新手。我在SQL解析中遇到了問題。SQL服務器XML解析到表

我有一個表名爲Task。它有3列:

  • 名稱
  • 任務
  • 日期

Task是以小時節約工作,如下格式的XML:

<TASK> 
    <A>1</A> 
    <B>4</B> 
    <C>0</C> 
</TASK> 

我的表會看起來像這樣(有多名員工)

Name   | Task          | Date 
======================================================================== 
Employee2219 | <TASK><A>1</A><B>4</B><C>0</C></ TASK > | 2014-01-28 
Employee2219 | <TASK><A>3</A><B>2</B><C>1</C></ TASK > | 2014-01-29 
.... 

我需要計算個小時的職員花費爲每個任務在一個星期內,如:

Name   | A | B | C | D 
=============================== 
Employee2219 | 4 | 6 | 1 | 0 
.... 

我是新來的XML,我無法來解決這一問題。

+0

「Task」列是實際的XML數據類型還是一些CHAR變體? – Bryan

+1

Prince Joseph T eh?這是否使我們成爲你的奴才? :-) – Tanner

+0

丹納它只是我的名字:) ..請幫助我解決這個 –

回答

2

這是簡單的提取使用XQuery的XML:

SELECT 
    Name, 
    SUM(TaskA) AS ATotal, 
    SUM(TaskB) AS BTotal, 
    SUM(TaskC) AS CTotal, 
    SUM(TaskD) AS DTotal 
FROM 
(
    SELECT 
     t.NAME, 
     t.Date, 
     Nodes.node.value('(A)[1]', 'int') AS TaskA, 
     Nodes.node.value('(B)[1]', 'int') AS TaskB, 
     Nodes.node.value('(C)[1]', 'int') AS TaskC, 
     Nodes.node.value('(D)[1]', 'int') AS TaskD 
    FROM 
     TASK t 
     cross apply t.Task.nodes('/TASK') as Nodes(node) 
) x 
WHERE 
    [Date] BETWEEN '2014-01-01' AND '2014-01-07' -- Your week range 
GROUP BY 
    Name; 

SqlFiddle here

請發表您的問題以文字 - 許多企業因此用戶從像imgur網站堵塞,所以回答變成猜測工作。

+0

這也將總結每個員工的價值? – Tanner

+0

基本上名稱是員工ID,它可以出現多次,所以任務xml需要爲每個員工ID彙總...但是,OP是不是很大 – Tanner

+0

非常感謝你StuartLC ..這是非常有益的..我們不能預測任務編號..它可能會改變..在那種情況下我們能做些什麼..?在這種情況下,我們無法指定每個任務.. –