使用子查询将SQL Server行转换为列
我尝试使用逗号删除将行放入列中,但如何使用子查询实现这一点,我在oracle中实现了 SQL Server:使用子查询将SQL Server行转换为列,sql,sql-server,Sql,Sql Server,我尝试使用逗号删除将行放入列中,但如何使用子查询实现这一点,我在oracle中实现了 SQL Server: DECLARE @listStr VARCHAR(MAX) SELECT @listStr = COALESCE(@listStr+',' ,'') + email FROM RDT_USER SELECT @listStr SELECT RTRIM(XMLAGG(XMLELEMENT(E, EMAIL || ',')).EXTRACT('//text()'), ',') AS RE
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' ,'') + email
FROM RDT_USER
SELECT @listStr
SELECT RTRIM(XMLAGG(XMLELEMENT(E, EMAIL || ',')).EXTRACT('//text()'), ',') AS RECEIVERID
FROM (SELECT DISTINCT (EMAIL) AS EMAIL
FROM RDT_USER
)
j1@gmail.com,j2@gmail.com,j3@gmail.com,j4@gmail.com
甲骨文:
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' ,'') + email
FROM RDT_USER
SELECT @listStr
SELECT RTRIM(XMLAGG(XMLELEMENT(E, EMAIL || ',')).EXTRACT('//text()'), ',') AS RECEIVERID
FROM (SELECT DISTINCT (EMAIL) AS EMAIL
FROM RDT_USER
)
j1@gmail.com,j2@gmail.com,j3@gmail.com,j4@gmail.com
预期输出:
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' ,'') + email
FROM RDT_USER
SELECT @listStr
SELECT RTRIM(XMLAGG(XMLELEMENT(E, EMAIL || ',')).EXTRACT('//text()'), ',') AS RECEIVERID
FROM (SELECT DISTINCT (EMAIL) AS EMAIL
FROM RDT_USER
)
j1@gmail.com,j2@gmail.com,j3@gmail.com,j4@gmail.com
您可以使用以下选项:
DECLARE @listStr VARCHAR(MAX) =
STUFF(
(
SELECT DISTINCT ',' + email
FROM RDT_USER
FOR XML PATH(''), TYPE
).value('.', 'VARCHAR(MAX)')
,1,1,'')
SELECT @listStr
如果您只想选择不带变量的选项,则以下操作应有效:
SELECT
STUFF(
(
SELECT DISTINCT ',' + email
FROM RDT_USER
FOR XML PATH(''), TYPE
).value('.', 'VARCHAR(MAX)')
,1,1,'')
请给出一个示例输出,您希望得到答复,请检查问题。我的问题是希望使用子查询来实现这一点。在使用SQL Server时,这种方法通常用于此类任务。我不知道为什么您需要子查询,因为这会得到您需要的结果…您是对的,但是在java环境中使用query来执行,作为查询执行,而不是作为函数或过程来执行,以声明关键字和其他变量