列1
行1 1
行2 2
行3 3
行4 4
利用SQL做成
列1 列1
行1 1 3
行2 2 4
补充说明:相当于先分页,然后把,两页的内容合并成一页,合成的一页,行数不变,增加一列把合并的那页内容放在这列中以3行为固定行转换成
转换成 .....
是这样么
--使用FOR XML的方式实现
select name,(
SELECT ',' + title FROM TestTitle subTitle WHERE name = TestTitle.name
FOR XML PATH('') ) as p
from TestTitle GROUP BY name
SELECT name,STUFF(
(
SELECT',' + title FROM TestTitle subTitle WHERE name = TestTitle.name FOR XML PATH('')
),1, 1, '') AS allTitle
FROM TestTitle GROUP BY name
--STUFF函数:删除指定长度的字符,并在指定的起点处插入另一组字符。
--参数1:操作数据源,参数2:指定起始位子,参数3:删除长度,参数4:插入新的数据源
SELECT STUFF('abcdef', 2, 2, 'A')
第二种方法
--第一步,设置好分组的编号
--PARTITION BY将结果集分为多个分区。
--开窗函数分别应用于每个分区,并为每个分区重新启动计算。
SELECT
ROW_NUMBER() OVER(PARTITION BY name ORDER BY title) AS ID,
name,title FROM TestTitle ORDER BY name,title
-- 第二步,根据有编号的子查询,进行分组处理
SELECT name,
CASE WHEN COUNT(name) = 1 THEN MAX(title)
WHEN COUNT(name) = 2 THEN
MAX( CASE WHEN SubQuery.no = 1 THEN title + ',' ELSE '' END )
+ MAX( CASE WHEN SubQuery.no = 2 THEN title ELSE '' END )
WHEN COUNT(name) = 3 THEN
MAX( CASE WHEN SubQuery.no = 1 THEN title + ',' ELSE '' END )
+ MAX( CASE WHEN SubQuery.no = 2 THEN title + ',' ELSE '' END )
+ MAX( CASE WHEN SubQuery.no = 3 THEN title ELSE '' END )
END AS new_title
FROM
(
SELECT
ROW_NUMBER() OVER(PARTITION BY name ORDER BY title ) AS no,
name,title
FROM TestTitle
) subQuery
GROUP BY name
如果不是你在给我说
@┢┦偉: 不是这样,应该是这样
转换成这样
@云中歌: 有点没看懂 下面的fid 和上面的fid的值不一样
@┢┦偉: 电脑,网速卡的一笔,谢谢你解答,我已近解决了,截图的时候说明的不够详细,FID其实不用管的,是转换后表的主键,主要是FIDLeft和FIDRight记录的是要转换表的主键。后头,我整理一下,把我的答案公布一下
@云中歌: 恩,不用。好的,弄出来我也学学。
看不出来有什么规律
嗯,我的错,相当于先分页,然后把,两页的内容合并成一页,合成的一页,行数不变,增加一列把合并的那页内容放在这列中
呵呵,期待学习,正在烦
问题我也没看懂, 需求不明确, 举的例子表述性不强, 云中歌的解答第一种方案可学, 第二种纯粹是拼接, 当“张三”身兼职位数>3时, 第二种方案不可取, 可以试试拼接字符串的方法:
--SQL查询中直接赋值
DECLARE @mytableTABLE ( Col1 VARCHAR(10) )
INSERT INTO @mytable
VALUES ( 'AA' ),
( 'BB' ),
( 'CC' )
SELECT @Colstring = ISNULL(@Colstring + ',', '') +ISNULL(Col1, '')
FROM @mytable
SELECT @Colstring AS Colstring
--For XML
DECLARE @mytableTABLE ( Col1 VARCHAR(10) )
INSERT INTO @mytable
VALUES ( 'AA' ),
( 'BB' ),
( 'CC' )
SELECT Col1+''
FROM @mytable ORDER BY Col1 FOR XML PATH('T')