2017-05-01 6 views
0

次の問題を解決するのを手伝ってください。複数の選択を1つのセルに表示

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

になります私は出力を必要とする私は、従業員表のデータで

1.employee 2.Details 

データベース内の2つのテーブルがアドレステーブルデータで

eid ename level 
1  x 9th 
2  y 10th 

になります持って考えます以下の形式

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

答えて

0

はこれを試してみてください:

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 

GROUP_CONCATは、いくつかの制限があり、これは何であると(必要に応じて)どのようにそれを変更することができることを考えてみましょうか?これについてはドキュメントをチェックしてください。

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

場所の順序を維持するために、あなたは

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' 
; 

に沿って仕事ができるアクションでそれを参照してください:SQL Fiddle

これが必要な場合は、調整/詳細をコメントしてください。

関連する問題