1
У меня есть следующая таблица:Специфическая раскладка XML требуется
CREATE TABLE PLMXC_ERP_INT_XML_BOM
(
admi_num int,
stlh_num varchar(20),
arti_oms_1 varchar(40),
arti_code varchar(20),
stlx_pos varchar(5),
stlx_aantal numeric(16,6)
);
со следующим содержанием:
INSERT INTO PLMXC_ERP_INT_XML_BOM
(admi_num, stlh_num, arti_oms_1, arti_code, stlx_pos, stlx_aantal)
VALUES
(1, '3P-2000245', 'Cover 2 undercolum 1MF', '3P-2000242', '1', 1),
(1, '3P-2000245', 'Cover 2 undercolum 1MF', '3P-2000243', '2', 1),
(1, '3P-2000245', 'Cover 2 undercolum 1MF', '3P-101707', '3', 5),
(1, '3P-101707', 'cover 1MF undercolumn', '3P-2000242', '1', 1),
(1, '3P-101707', 'cover 1MF undercolumn', '3P-2000243', '2', 1);
Когда я хочу создать XML из этого контента я использую
SELECT stlh.admi_num
,stlh.stlh_num
,stlh.arti_oms_1 as stlh_oms_1
,(SELECT
admi_num
,stlm.arti_code
,ROW_NUMBER()OVER(PARTITION BY stlm.stlh_num ORDER BY stlm.stlh_num) as stlm_num
,stlx_pos as stlm_pos
,stlx_aantal as stlm_aantal
FROM PLMXC_ERP_INT_XML_BOM stlm
WHERE stlm.stlh_num = stlh.stlh_num
FOR XML AUTO, TYPE, ELEMENTS
)
FROM [PLMXC_ERP_INT_XML_BOM] stlh
GROUP BY stlh.stlh_num, stlh.admi_num, stlh.arti_oms_1
FOR XML AUTO, ELEMENTS
и это возвращает меня
<stlh>
<admi_num>1</admi_num>
<stlh_num>3P-101707</stlh_num>
<stlh_oms_1>cover 1MF undercolumn</stlh_oms_1>
<stlm>
<admi_num>1</admi_num>
<arti_code>3P-2000242</arti_code>
<stlm_num>1</stlm_num>
<stlm_pos>1</stlm_pos>
<stlm_aantal>1.000000</stlm_aantal>
</stlm>
<stlm>
<admi_num>1</admi_num>
<arti_code>3P-2000243</arti_code>
<stlm_num>2</stlm_num>
<stlm_pos>2</stlm_pos>
<stlm_aantal>1.000000</stlm_aantal>
</stlm>
</stlh>
<stlh>
<admi_num>1</admi_num>
<stlh_num>3P-2000245</stlh_num>
<stlh_oms_1>Cover 2 undercolum 1MF</stlh_oms_1>
<stlm>
<admi_num>1</admi_num>
<arti_code>3P-2000242</arti_code>
<stlm_num>1</stlm_num>
<stlm_pos>1</stlm_pos>
<stlm_aantal>1.000000</stlm_aantal>
</stlm>
<stlm>
<admi_num>1</admi_num>
<arti_code>3P-2000243</arti_code>
<stlm_num>2</stlm_num>
<stlm_pos>2</stlm_pos>
<stlm_aantal>1.000000</stlm_aantal>
</stlm>
<stlm>
<admi_num>1</admi_num>
<arti_code>3P-101707</arti_code>
<stlm_num>3</stlm_num>
<stlm_pos>3</stlm_pos>
<stlm_aantal>5.000000</stlm_aantal>
</stlm>
</stlh>
Но что мне нужно, и я не в состоянии вернуться в
<stlh>
<admi_num>1</admi_num>
<stlh_num>3P-101707</stlh_num>
<stlh_oms_1>cover 1MF undercolumn</stlh_oms_1>
</stlh>
<stlm>
<admi_num>1</admi_num>
<arti_code>3P-2000242</arti_code>
<stlm_num>1</stlm_num>
<stlm_pos>1</stlm_pos>
<stlm_aantal>1.000000</stlm_aantal>
</stlm>
<stlm>
<admi_num>1</admi_num>
<arti_code>3P-2000243</arti_code>
<stlm_num>2</stlm_num>
<stlm_pos>2</stlm_pos>
<stlm_aantal>1.000000</stlm_aantal>
</stlm>
<!-- split into multiple row (result) here -->
<stlh>
<admi_num>1</admi_num>
<stlh_num>3P-2000245</stlh_num>
<stlh_oms_1>Cover 2 undercolum 1MF</stlh_oms_1>
</stlh>
<stlm>
<admi_num>1</admi_num>
<arti_code>3P-2000242</arti_code>
<stlm_num>1</stlm_num>
<stlm_pos>1</stlm_pos>
<stlm_aantal>1.000000</stlm_aantal>
</stlm>
<stlm>
<admi_num>1</admi_num>
<arti_code>3P-2000243</arti_code>
<stlm_num>2</stlm_num>
<stlm_pos>2</stlm_pos>
<stlm_aantal>1.000000</stlm_aantal>
</stlm>
<stlm>
<admi_num>1</admi_num>
<arti_code>3P-101707</arti_code>
<stlm_num>3</stlm_num>
<stlm_pos>3</stlm_pos>
<stlm_aantal>5.000000</stlm_aantal>
</stlm>
Мне нужно написать это в отдельные файлы XML для каждого stlh_num нужен новый файл.
Возможно ли это?
Это точная планировка, спасибо. Второй вопрос был, возможно, не столь очевидным. В нужном XML-содержимом я вставил пустую строку. Я хотел бы вернуть XML-результат для каждого уникального stlh_num. – TravelDuck
@ user2903515 Добавлена версия, в которой они возвращаются в разных строках. –
Да, мне нужно два возврата двух строк с результатом XML. Каждый результат содержит только один stlh_num. В приведенном выше примере это означает два XML-результата, но их легко было бы больше. Я добавил раскол в нужный результат в исходном вопросе. – TravelDuck