我有一列有1列varchar值的表。如果可能的話,我正在尋找一種方法將這些值連接成一個沒有循環的單個值。如果一個循環是最有效的方法,那麼我會這樣做,但我認爲在默認該方法之前我會要求其他選項。我也想保留在SQL查詢中。在沒有循環的單個列中連接記錄?
最終,我想做一個分裂函數的反義詞。
是否有可能沒有循環(或光標),或者我應該使用循環來實現這種情況?
編輯: 由於在MySql中如何做到這一點非常好(與MS Sql相反,就像我最初打算的那樣),我決定重新編寫代碼,以便其他人也能夠找到答案。
我有一列有1列varchar值的表。如果可能的話,我正在尋找一種方法將這些值連接成一個沒有循環的單個值。如果一個循環是最有效的方法,那麼我會這樣做,但我認爲在默認該方法之前我會要求其他選項。我也想保留在SQL查詢中。在沒有循環的單個列中連接記錄?
最終,我想做一個分裂函數的反義詞。
是否有可能沒有循環(或光標),或者我應該使用循環來實現這種情況?
編輯: 由於在MySql中如何做到這一點非常好(與MS Sql相反,就像我最初打算的那樣),我決定重新編寫代碼,以便其他人也能夠找到答案。
申報@concat VARCHAR(最大) 組@concat = ''
選擇@concat = @concat + COL1 + ' 從tablename1
使用此方法時,您無法使用訂單。你可以使用FOR XML PATH,就像我的答案一樣。然而,FOR XML PATH適用於SQL Server 2005並且最多可以使用 – 2009-10-20 15:28:52
@KM謝天謝地,在我的情況下,我不需要order by子句;然而,知道這很好。 – JamesEggers 2009-10-20 16:20:29
@KM。如果您確實需要ORDER BY子句,則可以選擇TOP 100%,並且SQL Server將允許它。 – Curt 2015-05-28 17:06:58
,' 我剛解決的問題像這樣和循環永遠佔據。因此,我將演示媒體中的值(在這種情況下是Crystal Reports)的數值放在一起,速度非常快。
只是一個想法。
不幸的是,我正在編寫的腳本是純數據操作來糾正一些不良數據。如果是UI相關的話,我會同意這樣做會是更好的選擇。 – JamesEggers 2009-10-19 22:00:23
現在大概是過期了,但退房Adam Machanic's post on the topic。
和this one is certainly dated; I wrote it in 2004。
爲什麼我比較喜歡「保存在SQL查詢中」的函數?因爲你可能不得不這樣做一次以上。爲什麼不把代碼封裝到單個模塊中,而不是在整個地方重複使用?
如果是MySQL,你可以使用GROUP_CONCAT
選擇一個,GROUP_CONCAT(B分離器 '')FROM表GROUP BY A;
供參考:有些人會因爲提供一個不相關的答案而讓你失望。 – 2009-10-20 00:43:22
當我在尋找MS Sql的時候,我仍然會贊成它,因爲別人也可能會詢問這個問題。 – JamesEggers 2009-10-20 01:09:23
但是當它被標記爲sql,sql-server和tsql時,他們不會去發現它...... – 2009-10-20 01:36:40
試試這個:
DECLARE @YourTable table (Col1 int)
INSERT INTO @YourTable VALUES (1)
INSERT INTO @YourTable VALUES (2)
INSERT INTO @YourTable VALUES (30)
INSERT INTO @YourTable VALUES (400)
INSERT INTO @YourTable VALUES (12)
INSERT INTO @YourTable VALUES (46454)
SELECT
STUFF(
(
SELECT
', ' + cast(Col1 as varchar(30))
FROM @YourTable
WHERE Col1<=400
ORDER BY Col1
FOR XML PATH('')
), 1, 2, ''
)
OUTPUT:
-------------------
1, 2, 12, 30, 400
(1 row(s) affected)
+1感謝。也許一個簡單的概念,但非常有價值。 – madcolor 2009-10-23 13:27:21