合并字符串函数
CREATE TABLE Test????
(
??ID INT,
??Name VARCHAR(20),
??Times DateTime,
??Salary DECIMAL
)
INSERT INTO Test
VALUES
(1,'小A','2009-01-01',100),
(1,'小A','2009-02-01',200),
(1,'小A','2009-03-01',300),
(2,'小B','2009-04-01',400),
(2,'小B','2009-05-01',500),
(2,'小B','2009-06-01',600)
CREATE FUNCTION GetString4Test(@ID INT)
RETURNS VARCHAR(2000)
AS
??BEGIN
????DECLARE @STR VARCHAR(2000)
????SET @STR=''
????SELECT @STR=@STR+CONVERT(VARCHAR(20),Times,120)+',' FROM Test WHERE ID=@ID
????RETURN @STR
??END
GO
SELECT DISTINCT Name,dbo.GetString4Test(ID),SUM(Salary) FROM Test
GROUP BY ID,Name 比游標性能更好一些,寫法更方便。 但是注意在連接查詢求聚合結果時,會有一些注意的地方。 適用于記錄數較多,或者禁止使用游標函數的場景。 結果如下:小A?2009-01-01 00:00:00,2009-02-01 00:00:00,2009-03-01 00:00:00,?600
小B?2009-04-01 00:00:00,2009-05-01 00:00:00,2009-06-01 00:00:00,?1500
(
??ID INT,
??Name VARCHAR(20),
??Times DateTime,
??Salary DECIMAL
)
INSERT INTO Test
VALUES
(1,'小A','2009-01-01',100),
(1,'小A','2009-02-01',200),
(1,'小A','2009-03-01',300),
(2,'小B','2009-04-01',400),
(2,'小B','2009-05-01',500),
(2,'小B','2009-06-01',600)
CREATE FUNCTION GetString4Test(@ID INT)
RETURNS VARCHAR(2000)
AS
??BEGIN
????DECLARE @STR VARCHAR(2000)
????SET @STR=''
????SELECT @STR=@STR+CONVERT(VARCHAR(20),Times,120)+',' FROM Test WHERE ID=@ID
????RETURN @STR
??END
GO
SELECT DISTINCT Name,dbo.GetString4Test(ID),SUM(Salary) FROM Test
GROUP BY ID,Name 比游標性能更好一些,寫法更方便。 但是注意在連接查詢求聚合結果時,會有一些注意的地方。 適用于記錄數較多,或者禁止使用游標函數的場景。 結果如下:小A?2009-01-01 00:00:00,2009-02-01 00:00:00,2009-03-01 00:00:00,?600
小B?2009-04-01 00:00:00,2009-05-01 00:00:00,2009-06-01 00:00:00,?1500
轉載于:https://blog.51cto.com/handongliu/145955
總結
- 上一篇: 备忘--Sinfors 设备出厂IP
- 下一篇: 网摘1