使用子查询将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

我尝试使用逗号删除将行放入列中,但如何使用子查询实现这一点,我在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 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来执行,作为查询执行,而不是作为函数或过程来执行,以声明关键字和其他变量