1

テーブルの varchar フィールドにいくつかの XML データを格納している SQL Server 2008 データベースがあります。これは asp.net ページで旅行を表すために使用されるため、そのデータを取得し、すべてのコスト値を合計して値の総コストを取得する方法が必要です。

XML 文字列は、他にも数十あります。多数の一致する文字列が存在する可能性があります。それは次のように述べています。

------------編集により追加された更新された XML スキーマ-------

<trip>
   <toolboxitemadded id="8ce489fa-acb7-40e9-8440-cad46e16ca65" class="ToolBoxItemAdded" version="1">
    <control id="Location" type="text" value="Mattison, LLC-David Taylor" tag="INPUT" />
    <control id="Description" value="Mattison, LLC&#xA;PO Box 7137&#xA;Statesville, NC 28687, United States&#xA;Tel:704-838-1991 Ext 209&#xA;E-Mail:david@mattison-consulting.com" tag="TEXTAREA" />
       <control id="Visibility_Customer" type="checkbox" value="true" tag="INPUT" />
       <control id="Visibility_Bidder" type="checkbox" value="true" tag="INPUT" />
       <control id="Visibility_Status" type="checkbox" value="true" tag="INPUT" />
       <control id="Reserved_expires" type="text" value="7/22/2012 17:47" tag="INPUT" />
       <control id="Reserved_contacts" type="hidden" value="2366" tag="INPUT" />
   </toolboxitemadded>
   <toolboxitemadded id="8a19f19b-79a8-4d1a-a12c-a4378160116e" class="ToolBoxItemAdded" version="1">
       <control id="TypeOfItem" value="Pallet" tag="SELECT" />
       <control id="NumberOfItems" type="text" value="4" tag="INPUT" />
       <control id="Description" value="Some cool stuff" tag="TEXTAREA" />
       <control id="BreaksDown" type="checkbox" value="false" tag="INPUT" />
       <control id="Length" type="text" value="48" tag="INPUT" />
       <control id="Width" type="text" value="48" tag="INPUT" />
       <control id="Height" type="text" value="48" tag="INPUT" />
       <control id="Weight" type="text" value="2000" tag="INPUT" />
       <control id="MeasurementType" value="Standard" tag="SELECT" />
       <control id="Hazmat" type="checkbox" value="false" tag="INPUT" />
       <control id="UNCode" type="text" value="" tag="INPUT" />
       <control id="ClassCode" type="text" value="" tag="INPUT" />
       <control id="Visibility_Customer" type="checkbox" value="true" tag="INPUT" />
       <control id="Visibility_Bidder" type="checkbox" value="true" tag="INPUT" />
       <control id="Visibility_Status" type="checkbox" value="false" tag="INPUT" />
  </toolboxitemadded>
  <toolboxitemadded id="ae33c118-2981-4a3e-b001-c6dc56d0e7f1" class="ToolBoxItemAdded" version="1">
    <control id="AirportName" type="text" value="KCLT" tag="INPUT" />
    <control id="ICAO" type="text" value="KCLT" tag="INPUT" />
    <control id="IATA" type="text" value="CLT" tag="INPUT" />
    <control id="Address" value="Charlotte" tag="TEXTAREA" />
    <control id="Description" value="" tag="TEXTAREA" />
    <control id="Visibility_Customer" type="checkbox" value="true" tag="INPUT" />
    <control id="Visibility_Bidder" type="checkbox" value="true" tag="INPUT" />
    <control id="Visibility_Status" type="checkbox" value="true" tag="INPUT" />
    <control id="Reserved_expires" type="text" value="7/22/2012 17:48" tag="INPUT" />
    <control id="Reserved_cost" type="text" value="15000" tag="INPUT" />
    <control id="Reserved_markup" type="text" value="" tag="INPUT" />
  </toolboxitemadded>
  <toolboxitemadded id="4aea1ef1-e0fd-482c-9d64-217b7f891e61" class="ToolBoxItemAdded" version="1">
    <control id="Description" type="text" value="Falcon test 3" tag="INPUT" />
    <control id="TailNumber" type="text" value="MP123D" tag="INPUT" />
    <control id="FlightNumber" type="text" value="12334" tag="INPUT" />
    <control id="Carrier" type="text" value="[object Object]" tag="INPUT" />
    <control id="Model" type="text" value="Desault Falcon 20" tag="INPUT" />
    <control id="AircraftNotes" value="Some aircraft" tag="TEXTAREA" />
    <control id="Visibility_Customer" type="checkbox" value="false" tag="INPUT" />
    <control id="Visibility_Bidder" type="checkbox" value="false" tag="INPUT" />
    <control id="Visibility_Status" type="checkbox" value="true" tag="INPUT" />
    <control id="Reserved_cost" type="text" value="20000" tag="INPUT" />
    <control id="Reserved_markup" type="text" value="" tag="INPUT" />
  </toolboxitemadded>
  <toolboxitemadded id="ae33c118-2981-4a3e-b001-c6dc56d0e7f1" class="ToolBoxItemAdded" version="1">
    <control id="AirportName" type="text" value="ATL" tag="INPUT" />
    <control id="ICAO" type="text" value="KATL" tag="INPUT" />
    <control id="IATA" type="text" value="ATL" tag="INPUT" />
    <control id="Address" value="Atlanta" tag="TEXTAREA" />
    <control id="Description" value="" tag="TEXTAREA" />
    <control id="Visibility_Customer" type="checkbox" value="true" tag="INPUT" />
    <control id="Visibility_Bidder" type="checkbox" value="true" tag="INPUT" />
    <control id="Visibility_Status" type="checkbox" value="true" tag="INPUT" />
    <control id="Reserved_expires" type="text" value="7/22/2012 17:48" tag="INPUT" />
    <control id="Reserved_cost" type="text" value="22000" tag="INPUT" />
    <control id="Reserved_markup" type="text" value="" tag="INPUT" />
  </toolboxitemadded>

------------編集により追加された更新された XML スキーマ-------

それはすべてのコードではありませんが、それがどのようにまとめられたかを理解するためにそこにたくさんあるはずです.

フィールドからこの xml 文字列のすべてのインスタンスを解析し、値を取得してそれらをすべて加算する必要があります。これにより、レポートで旅行の合計金額を得ることができますが、これがどのように行われるかはわかりません。

何か案は?

4

1 に答える 1

0

XML のように見えるので、少し運が良ければ、varchar列を XML にキャストし、値をフェッチしながら XQuery 式で合計することができます。

declare @T table
(
  Cost nvarchar(max)
)

insert into @T values
('<control id="Reserved_cost" type="text" value="20000" tag="INPUT" /><control id="Reserved_cost" type="text" value="20000" tag="INPUT" />'),
('<control id="Reserved_cost" type="text" value="20000" tag="INPUT" />')

select cast(T.Cost as xml).value('sum(//control/@value)', 'int') as CostSum
from @T as T

結果:

CostSum
-----------
40000
20000

アップデート:

XQuery の角括弧の間に述語を追加できます。これを使用して、属性が値を持つ
ノードのみを合計します。idReserved_cost

select cast(T.Cost as xml).value('sum(//control[@id="Reserved_cost"]/@value)', 'int') as CostSum
from @T as T
于 2012-09-07T19:20:06.727 に答える