Мне нужна твоя помощь. К сожалению, я не знаю 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 выше.