Kombinieren mehrerer Felder in ein Textfeld in SQL Server
-
09-09-2019 - |
Frage
Also ich habe eine Tabelle, die wie folgt aussieht:
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
und ich möchte einen Datensatz zurückzugeben, die wie folgt aussieht:
TaskID PeopleAssigned ------------------------------------------------------------ A01 Jake Adams, John Smith, Matthew Jones A02 Matthew Jones, Jake Adams
Das Problem hier ist, dass ich keine Ahnung hätte, wie viele Menschen zu einer bestimmten Aufgabe zugeordnet sind. Irgendwelche Vorschläge wäre toll!
Lösung
Diese Frage gestellt wird täglich hier. Hier von gestern. Und eine andere
https://stackoverflow.com/questions/tagged/sql+string-concatenation
Andere Tipps
AUSPROBIEREN:
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
AUF DER GRUNDLAGE VON GESTERN ANTWORT!
Hier ist die Ausgabe:
(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)
BTW, ist es eine schlechte Idee zum Speichern von Namen in einem Feld. Macht es sehr schwer abzufragen. Wie würden Sie effektiv für „Smith“ suchen withouth Platzhalter als erstes Zeichen verwendet, die von der Nutzung der Indizes der Datenbank ausschließt. Und wenn Namen Freiform wie diese gespeichert sind, könnte eine Person „John Smith“, „Smith, John“, „Smith, John“ „Smith, John“ usw. sein und Sie würden nicht erkennen, dass sie die gleiche Person waren. Sie sollten bei einem Minimum haben first_name, middle_name, last_name, personal_Suffix und dann können Sie möglicherweise ein calulated Feld haben, die den vollständigen Namen im Format zeigen Sie angezeigt werden sollen.
Ich bin neu in SQL und neu zu Stackoverflow, aber würde das nicht?
SELECT taskid, name FROM Tabelle GROUP BY taskid