我的情况是我在结构中有一个表
ID, name
1, 'value1'
1, 'value2'
2, 'value3'
2, 'value4'
1, 'value5'
我想以下列格式显示上述数据
id , combineName
1 ,'value1','value2', 'value5'
2 ,'value3','value4'
在SQL Server 2005中有一种简单的方法可以执行此操作,还是必须运行游标才能执行此操作?
答案 0 :(得分:1)
SQL 2005有一个PIVOT函数,可以做你想要的。 http://msdn.microsoft.com/en-us/library/ms177410.aspx
答案 1 :(得分:1)
假设您的数据位于表格中:
create FUNCTION toCSV (@id int)
RETURNS varchar(100)
AS
BEGIN
DECLARE @List varchar(100)
SELECT @List = COALESCE(@List + ', ', '') +
CAST(name AS varchar(10))
FROM aTable
WHERE ID = @id
RETURN(@list)
END;
go
然后:
从aTable
中选择不同的ID,dbo.to CSV(id)答案 2 :(得分:0)
您可以使用嵌套选择执行此操作,或使用pivot运算符更轻松地执行此操作,但您必须事先知道所有可能的值。
如果您希望它是动态的,那么您将需要一个游标和一些动态SQL。
答案 3 :(得分:0)
COALESCE功能的简单示例:
创建了一个Temp表,其中我在WHILE循环的帮助下放置了一行9行。 在主要部分,我刚刚将Column带到了COALESCE功能。
DROP TABLE #Material 设置NOCOUNT ON CREATE TABLE #Material (
MaterialID INT
)
DECLARE @LoopCounter INT DECLARE @MaxLoopCounter INT
SET @LoopCounter = 1 SET @MaxLoopCounter = 10
WHILE(@LoopCounter< @MaxLoopCounter) 开始 INSERT INTO #Material(MaterialID)VALUES(@LoopCounter) SET @LoopCounter = @LoopCounter + 1 END
/ *主要部分* / DECLARE @MaterialID VARCHAR(100)
SELECT @MaterialID = COALESCE(@MaterialID +',','')+ CAST(MaterialID AS VARCHAR(100))FROM #Material
打印'最终输出:'+ @MaterialID
- SELECT * FROM #Material SET NOCOUNT OFF