2017-05-01 3 views
0

Bitte helfen Sie mir, das folgende Problem zu lösen.Anzeigen mehrerer Auswahl in einer einzelnen Zelle

halte ich habe zwei Tabellen in einer Datenbank

1.employee 2.Details 

In Tabelle employee Daten werden

eid ename level 
1  x 9th 
2  y 10th 

In Adresstabelle Daten werden

AId eid location Adreess_type 
1 1 india permananet 
2 1 US  Temporary 
3 2 Japan  permananet 
4 2 China  Temporary 

ich in der Notwendigkeit ausgegeben werden Unteres Format

eid ename  fulllocation 
1  X   INDIA -US 
2  y   Japan-CHINA 

Antwort

0

Try this:

SELECT 
    e.eid, 
    e.name, 
    GROUP_CONCAT(a.location SEPARATOR '-') AS fulllocation 

FROM 
    employee as e 

    INNER JOIN address as a 
     ON e.eid = a.eid 

GROUP BY 
    e.eid 
0
select employee.eid, employee.ename, t.fulllocation 
from employee 
inner join (select eid, group_concat(location SEPARATOR '-') as fulllocation from Address group by eid) t 
on employee.eid = t.eid 

Bedenken Sie, dass GROUP_CONCAT einige Einschränkungen, was das ist und wie verändern sie (falls erforderlich)? Bitte überprüfen Sie die Dokumentation dafür.

0
DECLARE @t1 TABLE 
(
    eid int NOT NULL, 
    ename varchar(50), 
    level varchar(50) 
) 

DECLARE @t2 TABLE 
(
    aid int NOT NULL, 
    eid int, 
    location varchar(50), 
    address_type varchar(50) 
) 

INSERT INTO @t1 SELECT 1, 'x', '9th' 
INSERT INTO @t1 SELECT 2, 'y', '10th' 

INSERT INTO @t2 SELECT 1, 1, 'india', 'permanent' 
INSERT INTO @t2 SELECT 2, 1, 'US', 'temporary' 
INSERT INTO @t2 SELECT 3, 2, 'Japan', 'permanent' 
INSERT INTO @t2 SELECT 4, 2, 'China', 'temporary' 

SELECT * FROM @t1 
SELECT * FROM @t2 

SELECT t1.eid, t1.ename, t2.fullLocation 
FROM @t1 AS t1 
INNER JOIN (
    SELECT eid, COUNT(*) AS noofrecs 
     , fullLocation = LTRIM(RTRIM(ISNULL(STUFF(
        (
         SELECT DISTINCT '-' + CAST(t2.location as nvarchar(max)) 
         FROM @t2 t2 
         WHERE t1.eid = t2.eid 
         FOR XML PATH (''), TYPE).value('.', 'nvarchar(max)' 
        ), 1, 1, ''), ''))) 

    FROM @t2 as t1 
    GROUP BY eid 
) AS t2 
ON t1.eid = t2.eid 
0
DECLARE @t1 TABLE 
(
    eid int NOT NULL, 
    ename varchar(50), 
    level varchar(50) 
) 

DECLARE @t2 TABLE 
(
    aid int NOT NULL, 
    eid int, 
    location varchar(50), 
    address_type varchar(50) 
) 

INSERT INTO @t1 SELECT 1, 'x', '9th' 
INSERT INTO @t1 SELECT 2, 'y', '10th' 

INSERT INTO @t2 SELECT 1, 1, 'india', 'permanent' 
INSERT INTO @t2 SELECT 2, 1, 'US', 'temporary' 
INSERT INTO @t2 SELECT 3, 2, 'Japan', 'permanent' 
INSERT INTO @t2 SELECT 4, 2, 'China', 'temporary' 

SELECT * FROM @t1 
SELECT * FROM @t2 

SELECT b.eid,b.ename 
, STUFF((SELECT '_ ' + a.location FROM @t2 A 
Where A.eid=B.eid FOR XML PATH('')),1,1,'') As fulllocation 
From @t1 B 
Group By b.eid,b.ename 
0

Um die Reihenfolge der Orte zu erhalten, können Sie zusammen arbeiten

SELECT 
    e.eid 
    , e.ename 
    , CONCAT_WS('-', p.location, t.location) AS fulllocation 
FROM Employee e 
JOIN Address p 
    ON e.eid = p.eid 
    AND p.address_type = 'permananet' 
JOIN Address t 
    ON e.eid = t.eid 
    AND t.address_type = 'Temporary' 
; 

es in Aktion: SQL Fiddle.

Bitte kommentieren Sie, wenn und wie dies erfordert Anpassung/weitere Details.

Verwandte Themen