Ho una tabella con i seguenti campi.
- ID = Bigint (PK)
- USERID = bigint
- Area = Varchar (50)
Ora ogni utente ha 3 aree nella tabella (quindi ci sono 3 voci per USERid con area diversa).
Ho bisogno di uscita come di seguito:
Ora nel rapporto voglio visualizzare USERID e tutta l'Area con una virgola separata associata al suo UserID come sopra.
Provo con il gruppo ma non ho trovato aiuto.
risposte:
4 per risposta № 1Per MS-SQL Server 2008, è possibile utilizzare il seguente hack XML.
SELECT DISTINCT t.USERID, REPLACE((
SELECT Area AS "data()"
FROM table1 a
WHERE a.USERID = t.USERID
FOR XML path("")
), " ", ", ") AS Areas
FROM table1 t
Un po 'meglio sarebbe da usare STUFF
invece di REPLACE
SELECT DISTINCT t.USERID, STUFF((
SELECT Area AS "data()"
FROM table1 a
WHERE a.USERID = t.USERID
FOR XML path("")
) , 1, 1, "") AS Areas
FROM table1 t
Se hai un sacco di funzioni in cui devi usare questo e c'è un problema di prestazioni, allora è meglio dare un'occhiata al GROUP_CONCAT stringa aggregata per SQL Server. Questa è una funzione T_SQL, puoi scaricarla da CodePlex Qui.
0 per risposta № 2
Per MySQL, puoi raggruppare i risultati con i loro USERID
e quindi utilizzare GROUP_CONCAT
concatenare tutto Area
nel gruppo. Qualcosa come questo:
SELECT USERID, GROUP_CONCAT(Area) FROM table1 GROUP BY USERID;
Per SQL Server, si potrebbe voler dare un'occhiata a Simulazione della funzione MySQL di GROUP_CONCAT in SQL Server?
0 per risposta № 3
seleziona UserID, Area = (SELEZIONA Area + "," da # table1 A1 dove A.UserID = A1.UserID PER PERCORSO XML ("")
) da # table1 A GROUP BY A.UserID