2017-12-25 11 views
1

ich eine Frage hier Show multiple records in a row Beiträge geschrieben haben ein Ergebnis wie dieseszeigen mehrere Datensätze in einer Zeile in SQL Server

enter image description here

Es beantwortet wurde perfekt in MySQL zu bekommen, aber ich bin mit SQL Server, auf dem die Abfrage ist anders. Meine Tabellen sind

CREATE TABLE events 
(
    id int NOT NULL, 
    event_name varchar(100) NOT NULL, 
    event_id int NOT NULL 
); 

INSERT INTO events (id, event_name, event_id) 
VALUES (1, 'dance', 1), (2, 'sing', 2), (3, 'acting', 3), (4, 'debate', 4); 

CREATE TABLE students 
(
    id int NOT NULL, 
    student_name text NOT NULL, 
    event_id int NOT NULL 
); 

INSERT INTO students (id, student_name, event_id) 
VALUES (1, 'student1', 1), (2, 'student1', 2), 
     (3, 'student1', 3), (4, 'student1', 4), 
     (5, 'student2', 3), (6, 'student3', 2), 
     (7, 'student3', 4); 

ich mit einer Beispielabfrage hier versucht wurde http://rextester.com/RXK72524, aber es funktioniert nicht, da es.

Die Abfrage verwendet I

SELECT 
    s.student_name, 
    STUFF (g.student_name, 1, 1, '') AS events 
FROM 
    Students s 
CROSS APPLY 
    (SELECT 
     ',' + e.event_name 
    FROM 
     students s 
    LEFT JOIN 
     events e ON s.event_id = e.event_id 
    ORDER BY 
     e.event_name 
    FOR XML PATH ('')) g (student_name) 

mich bitte korrigieren. Dank

+0

SQL Server-Version? –

+0

@Romi Bitte markieren Sie als korrekt und up Abstimmung :) –

+1

Ihr Leben wird einfacher, wenn Sie Student_name Spalte als 'NVACHAR' statt' TEXT' –

Antwort

1

http://rextester.com/LOQZE28952

PS: Ihr Leben wird einfacher, wenn Sie student_name Spalte als NVACHAR statt TEXT,

Es erspart Ihnen machen nicht die CAST-Funktion

verwenden
--Sql Server 2014 Express Edition 
--Batches are separated by 'go' 

select @@version as 'sql server version' 


CREATE TABLE events (
    id int NOT NULL, 
    event_name varchar(100) NOT NULL, 
    event_id int NOT NULL 
); 

INSERT INTO events (id, event_name, event_id) 
VALUES 
    (1, 'dance', 1), 
    (2, 'sing', 2), 
    (3, 'acting', 3), 
    (4, 'debate', 4); 


CREATE TABLE students (
    id int NOT NULL, 
    student_name text NOT NULL, 
    event_id int NOT NULL 
); 

INSERT INTO students (id, student_name, event_id) 
VALUES 
    (1, 'student1', 1), 
    (2, 'student1', 2), 
    (3, 'student1', 3), 
    (4, 'student1', 4), 
    (5, 'student2', 3), 
    (6, 'student3', 2), 
    (7, 'student3', 4); 

SELECT DISTINCT(cast(s.student_name as NVARCHAR(100))) as Students, 
     stuff (g.student_name, 1, 1, '') as events 
FROM Students s 

CROSS APPLY 
(
    SELECT ',' + e.event_name 
    FROM Students s1 
    left join events e on s1.event_id = e.event_id 
    where cast(s1.student_name as NVARCHAR(100)) = cast(s.student_name as NVARCHAR(100)) 
    ORDER BY e.event_name 
    FOR XML PATH ('') 
) g (student_name) 

enter image description here

+0

Vielen Dank! Es funktionierte! – Romi

+0

@Romi bitte stimmen Sie die Antwort ab. –

Verwandte Themen