例如:假设一个表rsda对应如下:BH(编号) XM(姓名)
001 张三
001 李四
001 小明
002 赵XX
003 孙XX另一个表rsgz如下:(编号唯一)
BH(编号) GZ(工资)
001 1000
002 2000
003 900希望用一条SELECT语句做成如下结果:bh,xm,gz
001,张三 李四 小明,1000
002,赵XX,2000
003,孙XX,900
请大家帮一下,刚才问了一个现在又是一个问题!谢了
001 张三
001 李四
001 小明
002 赵XX
003 孙XX另一个表rsgz如下:(编号唯一)
BH(编号) GZ(工资)
001 1000
002 2000
003 900希望用一条SELECT语句做成如下结果:bh,xm,gz
001,张三 李四 小明,1000
002,赵XX,2000
003,孙XX,900
请大家帮一下,刚才问了一个现在又是一个问题!谢了
CREATE TABLE rsda([BH] varchar(10), [XM] varchar(10))
INSERT INTO rsda
SELECT '001', '张三'
UNION ALL SELECT '001', '李四'
UNION ALL SELECT '001', '小明'
UNION ALL SELECT '002', '赵XX'
UNION ALL SELECT '003', '孙XX'
CREATE TABLE rsgz([BH] varchar(10), [GZ] int)
INSERT INTO rsgz
SELECT '001', 1000
UNION ALL SELECT '002', 2000
UNION ALL SELECT '003', 900
GOCREATE FUNCTION AddStr(@BH VARCHAR(10))
RETURNS VARCHAR(100)--注意返回值得长度
AS
BEGIN
DECLARE @RE VARCHAR(100)--与返回值长度保持一致
SET @RE = ''
SELECT @RE = @RE + XM + ' ' FROM rsda WHERE BH = @BH
RETURN RTRIM(@RE)
END
GOSELECT A.BH + ',' + A.XM + ',' + CAST(B.GZ AS VARCHAR)
FROM (SELECT DISTINCT BH, dbo.AddStr(BH) AS XM FROM rsgz)A INNER JOIN rsgz B ON A.BH = B.BHDROP FUNCTION AddStr
DROP TABLE rsgz
DROP TABLE rsda结果
001,张三 李四 小,1000
002,赵X,2000
003,孙X,900
id value----- ------1 aa1 bb2 aaa2 bbb2 ccc 需要得到结果:id values------ -----------1 aa,bb2 aaa,bbb,ccc 即, group by id, 求 value 的和(字符串相加) 1. 旧的解决方法-- 1. 创建处理函数CREATE FUNCTION dbo.f_str(@id int)RETURNS varchar(8000)ASBEGIN DECLARE @r varchar(8000) SET @r = '' SELECT @r = @r + ',' + value FROM tb WHERE id=@id RETURN STUFF(@r, 1, 1, '')ENDGO -- 调用函数SELECt id, values=dbo.f_str(id) FROM tb GROUP BY id -- 2. 新的解决方法 -- 示例数据DECLARE @t TABLE(id int, value varchar(10))INSERT @t SELECT 1, 'aa'UNION ALL SELECT 1, 'bb'UNION ALL SELECT 2, 'aaa'UNION ALL SELECT 2, 'bbb'UNION ALL SELECT 2, 'ccc' -- 查询处理SELECT *FROM( SELECT DISTINCT id FROM @t)AOUTER APPLY( SELECT [values]= STUFF(REPLACE(REPLACE( ( SELECT value FROM @t N WHERE id = A.id FOR XML AUTO ), '<N value="', ','), '"/>', ''), 1, 1, ''))N /*--结果id values----------- ----------------1 aa,bb2 aaa,bbb,ccc (2 行受影响)
RETURNS VARCHAR(1000)--注意返回值得长度
AS
BEGIN
DECLARE @RE VARCHAR(100)--与返回值长度保持一致
SET @RE = ''
SELECT @RE = @RE + sono + ' ' FROM m_conso WHERE rdno = @BH
RETURN RTRIM(@RE)
END
SELECT rdno, dbo.AddStr(rdno) AS sono,sport FROM m_operation 谢谢各位