2013-04-05 16 views
2

在Firebird中,有一個稱爲List()的聚合將多個結果轉換爲逗號分隔的字符串。有沒有什麼好的方法在SQL Server中建立一個以逗號分隔的列表?

此函數似乎不存在於SQL Server中。是否有任何等價物,它不涉及大,長,醜,解決方法使用for xml或構建自己的CLR UDF? (是的,我知道這些方法,尋找我可能不知道的東西。)

+2

沒有這樣做的聚合函數,你必須使用你提到的兩個選項。 – Taryn 2013-04-05 18:49:48

+4

不是。請參閱[在Transact-SQL中連接行值](https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/) – 2013-04-05 18:51:45

+2

@CadeRoux我不'不知道這個騙局。除了僅指向Martin已經鏈接到的文章的鏈接專用答案外,沒有其他任何內容......此問題要求內置功能,不需要所有這些解決方法,或者提供更好的解決方法,既不需要其中存在。沒有回答這個問題應該有鏈接文章中的任何代碼。 – 2013-04-05 19:03:26

回答

7

不,這些是你必須使用的解決方法。我們一直在問一個GROUP_CONCAT相當於2006年以來:

http://connect.microsoft.com/SQLServer/feedback/details/247118/sql-needs-version-of-mysql-group-concat-function

...但該項目只收到13上投票(和一個反對票)。因此,我不完全責怪微軟專注於產品的其他增強功能,以推動銷售和客戶滿意度。沒有很多人抱怨(至少不是直接),並且GROUP_CONCAT不是營銷人員在幻燈片或商業廣告中看起來性感的東西 - 開發人員的生產力並不完全是銷售許可證的東西。 (另一方面,我想遇到14+人誰設法得到愚蠢的東西,如EOMONTHIIF實施。)

所以,如果你認爲這個功能是重要的,那麼請投票,更重要的是評論這將如何提高您的生產力/盈虧底線:

FWIW,XML版本是醜陋的,但它並不難掌握。我已經在這裏用了幾十個答案,因此我甚至不必去查看它。我也不覺得它非常慢。爲什麼你認爲微軟本土化的東西會更快?它必須做基本相同的事情。

+0

「開發人員的生產力不完全是出售許可證的東西。」你知道,這可能是我在很長一段時間裏在這裏聽到的最搞笑的事情。這是一種對開發人員除外的任何人都無用的工具。還有什麼其他因素** ** – 2013-04-05 19:38:09

+2

@MasonWheeler如果這些問題是針對亞倫的,那麼我認爲你可能會誤導他們。他所說的只是因爲這個功能的連接項目並沒有得到大規模的支持,所以很難真正責怪微軟沒有實施它們(而且「開發人員的生產力不完全是銷售許可證的原因」是微軟沒有沒有實施他們)。因此,您不應該向那些向您指出支持實際實現此功能的鏈接的人提出這些問題,而應該去詢問Microsoft並注意那些連接項 – Lamak 2013-04-05 19:51:56

+0

@Mason肯定您並不是建議SQL Server只是賣給開發者的開發者?微軟不會向開發者推銷。他們向CIO,CTO等市場推廣。其中一些人可能會擔心開發人員的工作效率,但大多數(如果不是全部的話)會更關心 - 例如 - HA/DR功能可以爲他們節省資金或防止他們損失資金。開發人員的工資已經支付。就像拉馬克說的那樣,這不是我做的決定,所以不要殺死信使。有這個功能會很好嗎?當然。有必要嗎?不,我們有解決方法。 – 2013-04-05 20:09:25