0

したがって、次のようなテーブルがあります。

名前 ID TaskID 割り当てられた時間
-------------------------------------------------- --------------
ジョン・スミス 4592 A01 40
マシュー・ジョーンズ 2863 A01 20
ジェイク・アダムス 1182 A01 100
マシュー・ジョーンズ 2863 A02 50
ジェイク・アダムス 2863 A02 10

そして、次のようなデータセットを返したい:

TaskID 担当者
-------------------------------------------------- ----------
A01 ジェイク・アダムス、ジョン・スミス、マシュー・ジョーンズ
A02 マシュー・ジョーンズ、ジェイク・アダムス

ここでの問題は、特定のタスクに何人の人が割り当てられているか分からないことです。どんな提案も素晴らしいでしょう!

4

4 に答える 4

4

この質問は毎日ここで尋ねられます。 こちらが昨日の. そしてもう一つ

https://stackoverflow.com/questions/tagged/sql+string-concatenation

于 2009-06-03T20:13:02.050 に答える
1

これを試して:

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)
于 2009-06-03T20:23:15.320 に答える
1

ところで、名前を 1 つのフィールドに格納するのはお勧めできません。クエリが非常に難しくなります。データベースがインデックスを使用できないようにする最初の文字としてワイルドカードを使用せずに、「Smith」を効果的に検索するにはどうすればよいでしょうか。そして、名前がこのように自由形式で保存されている場合、人物は「John Smith」、「Smith, John」、「Smith , John」、「Smith,John」などである可能性があり、それらが同一人物であることに気付かないでしょう。最低限、first_name、middle_name、last_name、personal_Suffix が必要です。その後、表示したい形式で完全な名前を表示する計算済みフィールドを持つことができます。

于 2009-06-03T20:53:38.287 に答える
0

私はSQLを初めて使用し、stackoverflowを初めて使用しますが、これは機能しませんか?

SELECT タスク ID、名前 FROM テーブル GROUP BY タスク ID

于 2009-06-03T20:09:58.623 に答える