某个select结果如下
NAME PATTERN COUNT
A BLACK 1
A WHITE 3
B RED 4
C GREEN 2
C BLUE 5
我想得到如下结果
NAME DESC
A BLACK(1),WHITE(3)
B RED(4)
C GREEN(2),BLUE(5)
请高手指点
NAME PATTERN COUNT
A BLACK 1
A WHITE 3
B RED 4
C GREEN 2
C BLUE 5
我想得到如下结果
NAME DESC
A BLACK(1),WHITE(3)
B RED(4)
C GREEN(2),BLUE(5)
请高手指点
解决方案 »
- 设置表中一列是另一列值的乘积
- 难!真的好难!大家一起看一下吧...
- 怎样重新建立索引?
- 求SQL Server2000实时双机备份实际应用的最佳方案
- SQL Server 中有无根据 LCID 获得语言标识符的函数?
- 关于自由组合的问题
- 刚刚入道的弟弟,请教问题
- 高分,关于SQLServer2000恐怖的聚集索引错误的问题
- 我想在INSERT触发器实现关键字自动+1怎么写?先回答正确我给100分。
- 小问题,大力或其他高手请进
- SQL2005 sa用户无法登陆,已尝试各种可查到的方法
- select '男' as 性别 into newtable from testtable怎样把性别设为char(2)?
EXEC CS'$A
NAME PATTERN COUNT
A BLACK 1
A WHITE 3
B RED 4
C GREEN 2
C BLUE 5
'--> 测试数据: [A]
if object_id('[A]') is not null drop table [A]
create table [A] (NAME varchar(1),PATTERN varchar(5),COUNT int)
insert into [A]
select 'A','BLACK',1 union all
select 'A','WHITE',3 union all
select 'B','RED',4 union all
select 'C','GREEN',2 union all
select 'C','BLUE',5ALTER FUNCTION GET_STRING(@NAME VARCHAR(10))
RETURNS NVARCHAR(40)
AS
BEGIN
DECLARE @RESULT NVARCHAR(40)
SELECT @RESULT=ISNULL(@RESULT+',','')+PATTERN+'('+LTRIM(COUNT)+')' FROM A WHERE NAME=@NAME
RETURN @RESULT
END
select NAME,DBO.GET_STRING(NAME) from [A] GROUP BY NAME
NAME
---- ----------------------------------------
A BLACK(1),WHITE(3)
B RED(4)
C GREEN(2),BLUE(5)(所影响的行数为 3 行)
--> 生成测试数据表: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([NAME] [nvarchar](10),[PATTERN] [nvarchar](10),[COUNT] [int])
INSERT INTO [tb]
SELECT 'A','BLACK','1' UNION ALL
SELECT 'A','WHITE','3' UNION ALL
SELECT 'B','RED','4' UNION ALL
SELECT 'C','GREEN','2' UNION ALL
SELECT 'C','BLUE','5'--SELECT * FROM [tb]-->SQL查询如下:
SELECT DISTINCT name, [DESC] = STUFF(
(
SELECT ','+pattern+QUOTENAME([COUNT], '(')
FROM tb
WHERE name = t.name FOR XML PATH('')
), 1, 1, ''
)
FROM tb t
/*
name DESC
---------- ----------------------------
A BLACK(1),WHITE(3)
B RED(4)
C GREEN(2),BLUE(5)(3 行受影响)
*/