sql - 实现 CTE

标签 sql sql-server sql-server-2008

我有下表:

create table #prd
(
  ver varchar(20),
  fam varchar(20),
  mm varchar(20),
)

insert into #prd values('dt','fam1','111')
insert into #prd values('dt','fam1','222')
insert into #prd values('mb','fam1','333')
insert into #prd values('mb','fam2','444')

我需要使用 CTE 的输出如下:

ver       family       MM
-------   ---------    ----------    
DT          fam1         111,222  
mb          fam1         333  
mb          fam2         444

请帮忙!!

最佳答案

您不需要 CTE。这是一个不使用 CTE 的解决方案

SELECT ver, fam,
    STUFF((
      SELECT  ', ' + mm
      FROM #prd AS prd
      WHERE p.ver = prd.ver
        AND p.fam = prd.fam
      ORDER BY mm
      FOR XML PATH('')
    ), 1, 2, '') AS MM
FROM #prd AS p
GROUP BY ver, fam

如果你需要它成为 CTE,试试这个

;WITH prd_CTE AS
    (
    SELECT ver, fam,
        STUFF((
          SELECT  ', ' + mm
          FROM #prd AS prd
          WHERE p.ver = prd.ver
            AND p.fam = prd.fam
          ORDER BY mm
          FOR XML PATH('')
        ), 1, 2, '') AS MM
    FROM #prd AS p
    GROUP BY ver, fam
    )
SELECT *
FROM prd_CTE

关于sql - 实现 CTE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6712812/

相关文章:

c# - 无需查询即可从数据库获取数据

sql - 将前导零添加到 varchar 列

sql - 如何插入表并获取主键值?

mysql - 为没有在 SQL Server 中指定默认值的非列生成默认值的脚本

sql-server - SQL SERVER 中的可信证书

php - 在 MySQL 中设置外键约束以与 Yii 框架一起使用

mysql - 如果存在 null 值,SUM 函数将返回 null

mysql - 如何将整个字符串小写,在 MYSQL 中保持第一个大写

sql - 在 Sql Server 中使用子查询更新查询

sql-server - 将小数点后第三位四舍五入到小数点第二位(例如 $0.033 变为 $0.04)