我数据库中的表是这个样子
因为需要,我在展现数据的时候需要这样展现数据
就是把这些等级都合并到一个字段里面。我是用的是ASP.NET,我现在不知道该使用什么方法才可以达到这种效果。请大侠指教!
SELECT t1.typeID , t1.typeName , STUFF(( SELECT ',' + t2.awardName FROM table1 t2 ( NOLOCK ) INNER JOIN t1 ON t1.typeID = t2.typeID FOR XML PATH('') ), 1, 1, '') AS awardName FROM ( SELECT DISTINCT typeID , typeName FROM table1 ) t1
楼上写的很好了, 这是 group by 的写法
select typeId, typeName, STUFF( ( SELECT ',' + awardName AS 'text()' FROM targetTable t2 WHERE t2.typeId = t1.typeId FOR XML PATH('') ) ,1 ,1 ,'' ) AS Awards from targetTable t1 group by typeId, typeName
查询两表的共同字段,然后用union all合并
哈哈,我来个重点提示,合并前请先对原数所进行备份。、
1楼、2楼的查询会产生“三好学生1一等奖,二等奖,三等奖,优秀学生将”这样的数据。
看楼主的展示效果图片,优秀学生将并没有归并到奖项里面,
如果楼主仅仅是将 一等奖 、二等奖、三等奖合并,请参考下面语句:
SELECT MIN(ID), typeName, typeid, ( CASE WHEN awardName = '优秀学生将' THEN '优秀学生将' WHEN awardName = '一等奖' OR awardName = '二等奖' OR awardName = '三等奖' THEN '一等奖,二等奖,三等奖' END ) FROM targetTable
GROUP BY typeName, typeid, ( CASE WHEN awardName = '优秀学生将' THEN '优秀学生将' WHEN awardName = '一等奖' OR awardName = '二等奖' OR awardName = '三等奖' THEN '一等奖,二等奖,三等奖' END )
楼主可以仔细学习下 SQL的case when ,for XML ,Stuff ,group by 的语句作用.尝试自己写下