我有一個包含電話號碼的表格。我不想爲每個號碼吐出一行,而是想返回逗號分隔的電話號碼列表。在sql中執行此操作最簡單的方法是什麼?一個while循環?在T-SQL中輸出一個以逗號分隔的列表
6
A
回答
0
This question有幾個很好的選擇。實際上我提到了同樣的問題,並實施了一個或多個這些迴應。
Here是另一組不錯的選擇。
1
看到我的回答從這個question。在這個問題中還有其他幾種方法可以做到這一點。儘管如此,COALESCE或xml路徑應該可以做到。
編輯(添加了來自前一個問題我的答案):
CREATE FUNCTION [dbo].[fn_MyFunction]()RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @str NVARCHAR(MAX)
DECLARE @Delimiter CHAR(2)
SET @Delimiter = ', '
SELECT @str = COALESCE(@str + @Delimiter,'') + AColumn
FROM dbo.myTable
RETURN RTRIM(LTRIM(@str))
END
3
您可以創建一個UDF,會做這樣的事情
CREATE FUNCTION dbo.GetBirthdays(@UserId INT)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @combined VARCHAR(MAX)
SELECT @combined = COALESCE(@combined + ', ' + colName + ', colName)
FROM YourTable
WHERE UserId = @UserId
ORDER BY ColName
END
基本上這只是拉的所有值進入一個簡單的列表。
9
其中一些答案過於複雜並且更復雜的XML查詢。我一直用這個:
select @Phones=(
Select PhoneColumn+','
From TableName
For XML Path(''))
-- Remove trailing comma if necessary
select @Phones=left(@Phones,len(@Phones)-1)
1
FWIW我創建了一個SQL CLR聚合函數。像冠軍一樣工作!
[序列化] [SqlUserDefinedAggregate(Format.UserDefined, 名稱= 「JoinStrings」, IsInvariantToNulls =真, IsInvariantToDuplicates =假, IsInvariantToOrder =假, MaxByteSize = 8000)]公共結構 JoinStrings: IBinarySerialize {0}公共字符串結果;
public void Init() { Result = ""; } public void Accumulate(SqlString value) { if (value.IsNull) return; Result += value.Value + ","; } public void Merge(JoinStrings Group) { Result += Group.Result; } public SqlString Terminate() { return new SqlString(Result.ToString().Trim(new
char [] {','})); }
public void Read(System.IO.BinaryReader r) { Result = r.ReadString(); } public void Write(System.IO.BinaryWriter w) { w.Write(Result.ToString()); } }
然後我就可以這樣使用它:
SELECT dbo.JoinStrings(Phone) FROM Phones Where UserID = XXX
1
假設你有其中有一個唯一的ID,並命名爲多個電話號碼PHONENUMBERS爲每一個客戶共享的另一表中的客戶表客戶ID字段作爲外鍵,這將使用相關的子查詢
Select C.ID, C.FirstName, C.LastName,
(select (STUFF((SELECT ', ' + PhoneNumber from PhoneNumbers P where P.CID = C.ID
FOR XML PATH('')), 1, 2, ''))) as PhoneNumbers
from Customers C
0
Select Unique ID, Replace(Rtrim(Ltrim(Case when [Phone_Number1] is not null Then [Phone_Number1]+' ' Else '' End +
Case when [Phone_Number2] is not null Then [Phone_Number2]+' ' Else '' End +
Case when [Phone_Number3] is not null Then [Phone_Number3]+' ' Else '' End)),' ',', ') as Phone_numbers
From MYTable
希望這是你正在尋找的東西,我不知道這是否會幫助你到目前爲止的問題。
相關問題
- 1. 輸出一個逗號分隔的列表中列在SQL Server
- 2. TSQL逗號分隔
- 3. TSQL XML逗號分隔列表
- 4. 以輸入一個逗號從用戶分隔列表
- 5. DB2逗號分隔輸出
- 6. 完整的發票號碼+逗號分隔的SQL列表(TSQL)
- 7. Oracle查詢輸出以逗號分隔
- 8. TSQL PATINDEX在逗號分隔列表中搜索精確值
- 9. PHP MYSQL - 搜索逗號,逗號分隔列表分隔列表
- 10. 在一列中用逗號分隔輸出的子查詢
- 11. 製表符分隔或逗號分隔輸出中的新行
- 12. 如何在Perl中將列表輸出爲逗號分隔值?
- 13. 逗號分隔的列表
- 14. 逗號分隔值列出
- 15. 兩個逗號分隔列出陣列
- 16. 剃刀,逗號分隔列表中的輸出值
- 17. 將SHOW COLUMNS的輸出分組爲逗號分隔列表
- 18. TSQL拆分逗號分隔字符串
- 19. TSQL將逗號分隔的數字列表轉換爲以逗號分隔的另一個表格的名稱列表
- 20. 追加數以逗號分隔列表
- 21. 逗號分隔列表
- 22. @synthesize逗號分隔列表
- 23. SQL查詢的逗號分隔輸出
- 24. SQL中的逗號分隔列表
- 25. 以逗號分隔的輸入文件
- 26. 正則表達式從逗號分隔號分隔的列表
- 27. 如何在POST請求中以逗號分隔的列表「轉義」逗號?
- 28. 將SQL分組爲一列中逗號分隔的值列表
- 29. 的Python:創建一個從逗號分隔的輸出
- 30. 如何顯示以逗號或分號分隔的值列表
可能的重複[有沒有辦法創建一個SQL Server函數來「連接」從子查詢到單個分隔字段的多行?](http://stackoverflow.com/questions/6899/is-there- a-way-to-create-a-sql-server-function-to-join-multiple-rows-from-a-sub) – 2011-05-13 18:31:15
這個問題的基本思想已被多次提出。看看下面答案中提供的鏈接。 – TKTS 2011-05-13 18:36:37
@TKTS - 如果這是SO上最猖獗的重複,我不會感到驚訝。似乎每天至少要問一次,有時候更多。 – 2011-05-13 18:38:04