2017-04-25 71 views
0

這裏我有一個簡單的表。我想最終得到一個像給定的表格。編寫sql語句實現此目的的最佳方法是什麼?如何編寫過濾國家sql查詢作爲狀態明智

表1

Id Name   Approved 
1  Australia  3 
2  UAE   1 
3  India   2 

表2

Id Status 
1  Submit 
2  In-Progress 
3  Pending 

顯示結果如

Submitted In-Progress  Pending 
UAE   India   Australia 
+0

選擇MemberFirms.ID,MemberFirms.Name,Status.Name從狀態MemberFirms INNER JOIN狀態在MemberFirms.StatusId = Status.ID – Hussain

+1

或許讓我們看到,比方說,10個國家發生了什麼,你應該添加更多的數據。 –

+0

這是這裏的過程中,我創建一個簡單的countryList – Hussain

回答

0

嘗試這種情況: -

select 
trim(replace(group_concat(submitted),',',' ')) as submitted, 
trim(replace(group_concat(InProgress),',',' ')) as InProgress, 
trim(replace(group_concat(Pending),',',' ')) as Pending 
from 
(
Select 
case when status='Submit' then A.Name else ' ' end as submitted, 
case when status='In-Progress' then A.Name else ' ' end as InProgress, 
case when status='Pending' then A.Name else ' ' end as Pending 

FROM 

TABLE1 A 
INNER JOIN 
TABLE2 B 
ON A.ID=B.ID 
) a; 
0

這裏的答案給出的數據:

select `Submit`,`In-Progress`,`Pending` from 
(select `Submit`,`In-Progress`,INP.id from 
(select Name as 'Submit',a.id from 
(select * from table1)as a 

LEFT JOIN 

    (select * from table2) as b 
on a.Approvide = b.`Id` 
where b.`STATUS` = 'Submit') as Sub 


INNER JOIN 


(select Name as 'In-Progress',a.id from 
(select * from table1)as a 

LEFT JOIN 

    (select * from table2) as b 
on a.Approvide = b.`Id` 
where b.`STATUS` = 'In-Progress') as INP 
on Sub.id != INP.id) as c 


INNER JOIN 


(select Name as Pending,a.id from 
(select * from table1)as a 

LEFT JOIN 

    (select * from table2) as b 
on a.Approvide = b.`Id` 
where b.`STATUS` = 'Pending') as Pen 

on c.id != Pen.id 
0
select Name,Status from Table1 natural join Table2; 

這很簡單。結果現在應該看起來像這樣。我認爲這是通常的方法,即我們如何從多個表中檢索信息。

Name   Status 

Australia  Pending 
UAE   Submit 
India   In-Progress 

請考慮

1

請嘗試以下查詢:

create table #country 
(
    ID int identity(1,1), 
    Name varchar(30), 
    Approved int 
) 

create table #status 
(
    ID int, 
    Status varchar(30) 
) 

insert into #country (Name, Approved) values ('Australia',3), ('UAE',1), ('India',2) 
insert into #status (ID, Status) values (1,'Submit'), (2, 'In-Progress'), (3,'Pending') 

select Submit, [In-Progress],[Pending] 
from (
    select t1.Name, t2.Status 
    from #country t1 
    inner join #status t2 on t1.Approved = t2.ID 
)dd1 
pivot (
    max(Name) for Status in ([Submit], [In-Progress],[Pending]) 
) piv 

drop table #country 
drop table #status 

此查詢的輸出: enter image description here