MS SQL, группировка, для XML и многое другое ... нужна помощь с этим запросом - PullRequest
1 голос
/ 29 августа 2011

Мне нужна твоя помощь. К сожалению, я не знаю SQL так же хорошо, как C # (или большинство других языков), и я достиг своих пределов этим запросом. Этот пост может быть немного многословным, поэтому я заранее прошу прощения за это, но я хочу убедиться, что я включил всю необходимую информацию.

Моя цель - создать запрос, который выбирает данные из SQL, группирует их по значению подстроки одного из столбцов и выводит в XML. Я довольно близко, но я врезался в стену.

Вот пример того, как это должно выглядеть так:

<EXAMPLE_DATA>
  <headEnd nam="AAAA">
    <hardware fromDevice="ExampleDeviceAAAA" />
    <hardware fromDevice="ExampleDeviceAAAA" />
    <hardware fromDevice="ExampleDeviceAAAA" />
  </headEnd>
  <headEnd nam="BBBB">
    <hardware fromDevice="ExampleDeviceBBBB" />
    <hardware fromDevice="ExampleDeviceBBBB" />
    <hardware fromDevice="ExampleDeviceBBBB" />
</EXAMPLE_DATA>

Как видите, последние четыре символа fromDevice определяют мои группировки headEnd ... вот что я могу вернуть прямо сейчас:

<EXAMPLE_DATA>
  <headEnd nam="[headendId]">
    <hardware fromDevice="ExampleDeviceAAAA" headendId="AAAA" />
    <hardware fromDevice="ExampleDeviceAAAA" headendId="AAAA" />
    <hardware fromDevice="ExampleDeviceAAAA" headendId="AAAA" />
    <hardware fromDevice="ExampleDeviceBBBB" headendId="BBBB" />
    <hardware fromDevice="ExampleDeviceBBBB" headendId="BBBB" />
    <hardware fromDevice="ExampleDeviceBBBB" headendId="BBBB" />
</EXAMPLE_DATA>

И, наконец, вот мой код, который возвращает приведенный выше XML:

SELECT 
  '[headendID]' as "@nam"
  , (
    SELECT hardware.Name as "@fromDevice", RIGHT(hardware.Name, 4) as "@headendId"
    FROM tblHardware AS hardware
    GROUP BY RIGHT(hardware.Name, 4), hardware.Name
    for xml path ('hardware') , type
  ) 
for xml path ('headEnd'), root ('EXAMPLE_DATA')

Я удалил множество несущественных столбцов, чтобы попытаться сделать этот пост немного легче для чтения.

Итак, глядя на то, что мне нужно, чтобы XML выглядел, возможно ли это вообще? Я предполагаю, что все возможно ... но в этом случае я полностью озадачен.

Спасибо за чтение!

РЕДАКТИРОВАТЬ: Чтобы убедиться, что мой вопрос ясен, мне нужно, чтобы код SQL выводил данные XML, сгруппированные по запросу подстроки hardware.Name. Я пытаюсь сделать вывод похожим на первый блок XML выше.

1 Ответ

1 голос
/ 29 августа 2011

Вот, пожалуйста:

 SELECT 
   RIGHT(categ.Name, 4) as "@nam" ,    
   (
   SELECT hardware.Name as "@fromDevice"
   FROM tblHardware AS hardware
   WHERE RIGHT(categ.Name, 4) = RIGHT(hardware.Name, 4)
   for xml path ('hardware') , type
   )
 FROM tblHardware as categ
 GROUP BY  RIGHT(categ.Name, 4)
 for xml path ('headEnd'), root ('EXAMPLE_DATA')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...