SQL Select FOR XML PATH - 合并排序并连接字符串与递增计数器
SQL Select FOR XML PATH - Combine ordering and concatenate string with increasing counter
我试图从以下SQL table
CODE , FILENAME , ORDER
xxxx , Noimage.jpg , 0
xxxx , yyyy.jpg , 2
xxxx , zzzz.jpg , 1
xxxx , aaaa.jpg , 3
结果如下 --> p1=zzzz.jpg&p2=yyyy.jpg&p3=aaaa.jpg
我试过了
SELECT STUFF((SELECT '&' + FILENAME
FROM MYTABLE
WHERE IMAGEORDER<>0
FOR XML PATH('')) ,1,1,'') AS Txt
但我不知道如何结合排序和基于排序来连接 p1、p2、p3
感谢任何帮助
您的内容需要元数据,否则输出将被格式化为 xml。此外,如果您使用的是 2016+ 版本,则可以使用 STUFF() 函数来实现相同的功能。我添加了一个归一化 CTE 以添加基于 IMAGEORDER 计算的 P1、P2..PX 值。
;WITH Normalized AS
(
SELECT
'&P'+CAST(ROW_NUMBER() OVER (ORDER BY IMAGEORDER) AS NVARCHAR(10))+'='+FILENAME AS Item,
IMAGEORDER
FROM
MYTABLE
WHERE
IMAGEORDER<>0
)
SELECT STUFF((SELECT Item
FROM Normalized ORDER BY IMAGEORDER
FOR XML PATH(''), TYPE).value('.','varchar(max)') ,1,1,'') AS Txt
您只需要对行进行排序:
DECLARE @t TABLE (Code VARCHAR(255), Filename VARCHAR(255), ImageOrder INT)
INSERT INTO @t VALUES
('xxxx', 'Noimage.jpg', 0),
('xxxx', 'yyyy.jpg', 2),
('xxxx', 'zzzz.jpg', 1),
('xxxx', 'aaaa.jpg', 3)
SELECT REPLACE(
(SELECT CAST('&p' + CAST(ImageOrder AS varchar) + '=' + Filename AS VARCHAR(MAX))
FROM @t
WHERE ImageOrder <> 0
ORDER BY ImageOrder
FOR XML PATH (''))
, 'amp;', '') AS Txt
这会给你结果:
&p1=zzzz.jpg&p2=yyyy.jpg&p3=aaaa.jpg
我试图从以下SQL table
CODE , FILENAME , ORDER
xxxx , Noimage.jpg , 0
xxxx , yyyy.jpg , 2
xxxx , zzzz.jpg , 1
xxxx , aaaa.jpg , 3
结果如下 --> p1=zzzz.jpg&p2=yyyy.jpg&p3=aaaa.jpg
我试过了
SELECT STUFF((SELECT '&' + FILENAME
FROM MYTABLE
WHERE IMAGEORDER<>0
FOR XML PATH('')) ,1,1,'') AS Txt
但我不知道如何结合排序和基于排序来连接 p1、p2、p3
感谢任何帮助
您的内容需要元数据,否则输出将被格式化为 xml。此外,如果您使用的是 2016+ 版本,则可以使用 STUFF() 函数来实现相同的功能。我添加了一个归一化 CTE 以添加基于 IMAGEORDER 计算的 P1、P2..PX 值。
;WITH Normalized AS
(
SELECT
'&P'+CAST(ROW_NUMBER() OVER (ORDER BY IMAGEORDER) AS NVARCHAR(10))+'='+FILENAME AS Item,
IMAGEORDER
FROM
MYTABLE
WHERE
IMAGEORDER<>0
)
SELECT STUFF((SELECT Item
FROM Normalized ORDER BY IMAGEORDER
FOR XML PATH(''), TYPE).value('.','varchar(max)') ,1,1,'') AS Txt
您只需要对行进行排序:
DECLARE @t TABLE (Code VARCHAR(255), Filename VARCHAR(255), ImageOrder INT)
INSERT INTO @t VALUES
('xxxx', 'Noimage.jpg', 0),
('xxxx', 'yyyy.jpg', 2),
('xxxx', 'zzzz.jpg', 1),
('xxxx', 'aaaa.jpg', 3)
SELECT REPLACE(
(SELECT CAST('&p' + CAST(ImageOrder AS varchar) + '=' + Filename AS VARCHAR(MAX))
FROM @t
WHERE ImageOrder <> 0
ORDER BY ImageOrder
FOR XML PATH (''))
, 'amp;', '') AS Txt
这会给你结果:
&p1=zzzz.jpg&p2=yyyy.jpg&p3=aaaa.jpg