Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于xml构造问题的SQL_Sql_Xml - Fatal编程技术网

用于xml构造问题的SQL

用于xml构造问题的SQL,sql,xml,Sql,Xml,我对SQL中的FOR XML子句有一个问题。表中的数据以列为间隔(参见下面的示例),在数据输出中,到现在为止,我在列中得到的每个间隔的日期都相同 SQL表: ID CTID dDate dtmInterval CO_Forecast AHT_Forecast 1 2 2015-10-13 08:00:00 5.05004 457.67751 2 2 2015-10-13 08:15:00 5.24004 457.67751 3 2 2015-1

我对SQL中的FOR XML子句有一个问题。表中的数据以列为间隔(参见下面的示例),在数据输出中,到现在为止,我在列中得到的每个间隔的日期都相同

SQL表:

ID  CTID    dDate   dtmInterval CO_Forecast AHT_Forecast
1   2   2015-10-13  08:00:00    5.05004 457.67751
2   2   2015-10-13  08:15:00    5.24004 457.67751
3   2   2015-10-13  08:30:00    4.49004 457.67751
4   2   2015-10-13  08:45:00    4.50004 457.67751
5   2   2015-10-13  09:00:00    5.65004 457.67751
我在FOR XML子句中使用以下代码:

SELECT TOP 1000

 [ctID]
,[forecastData/date/day] = Day(dDate) 
,[forecastData/date/month] = month(dDate)
,[forecastData/date/year] = year(dDate)
,[co_forecast] AS [forecastData/dailyData/contactsReceived]
,[AHT_Forecast] AS [forecastData/dailyData/averageAHT]

FROM [ProductionForecast].[dbo].[Forecast]

group by [co_forecast], [AHT_Forecast], [CTID], dDate

FOR XML PATH ('ctForecast'), ROOT ('forecastImport')
我得到的输出如下:

<forecastImport>
  <ctForecast>
    <ctID>2</ctID>
    <forecastData>
      <date>
        <day>13</day>
        <month>10</month>
        <year>2015</year>
      </date>
      <dailyData>
        <contactsReceived>5.05004</contactsReceived>
        <averageAHT>457.67751</averageAHT>
      </dailyData>
    </forecastData>
  </ctForecast>
  <ctForecast>
    <ctID>2</ctID>
    <forecastData>
      <date>
        <day>13</day>
        <month>10</month>
        <year>2015</year>
      </date>
      <dailyData>
        <contactsReceived>5.24004</contactsReceived>
        <averageAHT>457.67751</averageAHT>
      </dailyData>
    </forecastData>
  </ctForecast>
<forecastImport>
<ctForecast>
<ctID>95</ctID>
<forecastData>
<date><day>01</day><month>11</month><year>2015</year></date>
<dailyData>
<contactsReceived>0</contactsReceived>
<averageAHT>0</averageAHT>
</dailyData>
</forecastData>
</ctForecast>
<ctForecast>
<ctID>95</ctID>
<forecastData>
<date><day>02</day><month>11</month><year>2015</year></date>
<dailyData>
<contactsReceived>594.81653</contactsReceived>
<averageAHT>387</averageAHT>
</dailyData>
</forecastData>
</ctForecast>

2.
13
10
2015
5.05004
457.67751
2.
13
10
2015
5.24004
457.67751
一切都是打开和关闭正确的位置,但我连续96次得到相同的日期,需要这些数据的服务器无法读取

我希望它输出以下内容:

<forecastImport>
  <ctForecast>
    <ctID>2</ctID>
    <forecastData>
      <date>
        <day>13</day>
        <month>10</month>
        <year>2015</year>
      </date>
      <dailyData>
        <contactsReceived>5.05004</contactsReceived>
        <averageAHT>457.67751</averageAHT>
      </dailyData>
    </forecastData>
  </ctForecast>
  <ctForecast>
    <ctID>2</ctID>
    <forecastData>
      <date>
        <day>13</day>
        <month>10</month>
        <year>2015</year>
      </date>
      <dailyData>
        <contactsReceived>5.24004</contactsReceived>
        <averageAHT>457.67751</averageAHT>
      </dailyData>
    </forecastData>
  </ctForecast>
<forecastImport>
<ctForecast>
<ctID>95</ctID>
<forecastData>
<date><day>01</day><month>11</month><year>2015</year></date>
<dailyData>
<contactsReceived>0</contactsReceived>
<averageAHT>0</averageAHT>
</dailyData>
</forecastData>
</ctForecast>
<ctForecast>
<ctID>95</ctID>
<forecastData>
<date><day>02</day><month>11</month><year>2015</year></date>
<dailyData>
<contactsReceived>594.81653</contactsReceived>
<averageAHT>387</averageAHT>
</dailyData>
</forecastData>
</ctForecast>

95
01112015
0
0
95
02112015
594.81653
387
我已经尝试了很多不同的方法,现在我只看到一个答案,那就是启动并运行一个存储过程,它将数据传输到一个新表中,而不使用dtminterval列,但是我想使用我已有的方法,这可能吗


亲切问候。

我自己找到了答案,使用的是以下代码:

SELECT
 [CTID]
,[dDate]
,[CO_Forecast] = Sum([CO_Forecast])
,AHT_Forecast = CASE WHEN Sum([CO_Forecast]) = 0 THEN 0 ELSE SUM(LOAD) /         Sum([CO_Forecast]) 
END

FROM
(
SELECT
[ID]
,[CTID]
,[dDate]
,[dtmInterval]
,[CO_Forecast]
,[AHT_Forecast]
,LOAD = CO_Forecast * AHT_Forecast

FROM            
[ProductionForecast].[dbo].[Forecast]) AS Sub

GROUP BY 
 [CTID]
,[dDate]

太好了,你自己找到了答案(这个…)。现在你应该将自己的答案标记为已接受,以表明此问题已结束。。。谢谢