SQL Serverで1つのテキストフィールドに複数のフィールドを組み合わせ
-
09-09-2019 - |
質問
だから私はこのようになりますテーブルを持っています:
Name ID TaskID HoursAssigned ---------------------------------------------------------------- John Smith 4592 A01 40 Matthew Jones 2863 A01 20 Jake Adams 1182 A01 100 Matthew Jones 2863 A02 50 Jake Adams 2863 A02 10
と、私はこのようになり、データセットを返すようにしたい:
TaskID PeopleAssigned ------------------------------------------------------------ A01 Jake Adams, John Smith, Matthew Jones A02 Matthew Jones, Jake Adams
ここでの問題は、私は与えられたタスクに割り当てられているどのように多くの人は考えているだろうということです。任意の提案は素晴らしいことだ!
解決
この質問はここに毎日聞かれます。 ここで昨日ののです。そして、別の1 にhref="https://stackoverflow.com/questions/273238/how-to-use-group-by-to-concatenate-strings-in-mssql">
https://stackoverflow.com/questions/tagged/sql+string-concatenationする
他のヒント
この方法を試してください。
declare @table table (name varchar(30), ID int, TaskID char(3), HoursAssigned int)
insert into @table values ('John Smith' ,4592 ,'A01' ,40)
insert into @table values ('Matthew Jones',2863 ,'A01' ,20)
insert into @table values ('Jake Adams' ,1182 ,'A01' ,100)
insert into @table values ('Matthew Jones',2863 ,'A02' ,50)
insert into @table values ('Jake Adams' ,2863 ,'A02' ,10)
--formatted so you can see what is happening
SELECT DISTINCT
t1.TaskID
,SUBSTRING(
replace(
replace(
(SELECT
t2.Name
FROM @Table AS t2
WHERE t1.TaskID=t2.TaskID
ORDER BY t2.Name
FOR XML PATH(''))
,'</NAME>','')
,'<NAME>',', ')
,3,2000) AS PeopleAssigned
FROM @table AS t1
昨日の回答に基づいて!
ここに出力されます:
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
TaskID PeopleAssigned
------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
A01 Jake Adams, John Smith, Matthew Jones
A02 Jake Adams, Matthew Jones
(2 row(s) affected)
とところで、一つのフィールドに名前を格納することは悪い考えです。それは非常に難しい照会することができます。どのように効果的にインデックスを使用してからデータベースを排除する最初の文字としてワイルドカードを使用してwithouth「スミス」を検索します。名前は次のように自由形式を格納している場合と、人は「ジョン・スミス」、「スミス、ジョン」、「スミス、ジョン・」「・スミス、ジョン」などであるかもしれないし、あなたは彼らが同じ人だった気付いていないでしょう。あなたはminumumでFIRST_NAME、MIDDLE_NAME、LAST_NAME、personal_Suffixを持っている必要があり、その後、あなたはおそらく、あなたが表示したい形式で完全な名前を示して言うアサーションフィールドを持つことができます。
私はStackOverflowのためにSQLへの新たな、そして新しいですが、この作品ではないでしょうか?
SELECTのtaskId、のtaskId BYテーブルのグループから名前