如何通過select語句循環結果以獲得格式化文本? 例如選擇是這樣的:如何在SQL Sever中格式化TSQL SELECT輸出
select name from table
,我們希望有一個變量@names這樣的:
"name1,name2,name3"
數據庫是SQL Server 2005中
如何通過select語句循環結果以獲得格式化文本? 例如選擇是這樣的:如何在SQL Sever中格式化TSQL SELECT輸出
select name from table
,我們希望有一個變量@names這樣的:
"name1,name2,name3"
數據庫是SQL Server 2005中
如果表中包含多個記錄,即:
1, name1, ..
2, name2, ..
3, name3, ..
那麼這個查詢:
DECLARE @names VARCHAR(MAX)
SELECT @names = COALESCE(@names + ', ', '') + name
FROM table
會產生一個結果:
name1, name2, name3
這正是我需要的。謝謝。也varchar(max)不能用於一個SQL函數參數,所以我用varchar(500)爲例 – mohamadreza 2010-04-18 08:00:49
這將需要一個函數內完成。沒有快速的方法來做到這一點。通常情況下,您可以在客戶端代碼中執行此操作。
如果你打算在每一行上做一個函數來形成另一個查詢,它會很慢,因爲需要爲每一行調用該函數。您應該一次處理一組數據,它一次處理所有行。這是如何連接多個值再查詢的每一行的例子:
set nocount on;
declare @t table (id int, name varchar(20), x char(1))
insert into @t (id, name, x)
select 1,'test1', 'a' union
select 1,'test1', 'b' union
select 1,'test1', 'c' union
select 2,'test2', 'a' union
select 2,'test2', 'c' union
select 3,'test3', 'b' union
select 3,'test3', 'c'
SELECT p1.id, p1.name,
stuff(
(SELECT
', ' + x
FROM @t p2
WHERE p2.id=p1.id
ORDER BY name, x
FOR XML PATH('')
)
,1,2, ''
) AS p3
FROM @t p1
GROUP BY
id, name
OUTPUT:
id name p3
----------- -------------------- -----------
1 test1 a, b, c
2 test2 a, c
3 test3 b, c
@mohamadreza,根據您的評論你打算換此http://計算器。/2661437/how-to-format-tsql-select-output-in-sql-sever/2661475#2661475在一個函數中。但是,如果你這樣做,並且你在查詢的選擇列表中使用它,它將是非常低效的。有很多更好的方法來處理這個問題,請參閱我的答案,瞭解一個例子。 – 2010-04-19 13:49:54