2014-03-19 32 views
2

我需要創建SQL,將列出對誰具有相同的植物值顯示爲多列

有3個表

Plant_Table 
-------------- 
Snum  Plant cost 
    A  Rose  5.00 
    B  Willow 6.00 
    C  Lilly  7.00 

Landscaper_Table 
---------------- 
Lnum Lname   Laddress 
    1  Dr Plant   xxx st 
    2  Plant Scaper  zzz st 
    3  George Gardener yyy st 

land_plant_Table 
--------------- 
Lnum Snum instock 
    1  A   3 
    2  A   3 
    2  B   3 
    2  C   3 
    3  A   3 
    3  C   3 

我需要列出對承包商,和誰保持相同的物資庫存物資的承包商的名稱

我想要的結果的一個例子是

Landscaper1 Landscaper2  Landscaper 3   Plant 
    Dr plant  George Gardener  Plant Scaper   Rose 
    Plant Scaper George Gardener  ---     Lilly 

我該怎麼做?

+0

請妥善描述的模式。至於什麼是結果你想 – cppcoder

+0

顯示一個例子,我不知道如何正確地格式化在這裏呢.. – cppcoder

+0

我想會是 Contractor1 Contractor2結果的一個例子用品 Cname的Cname的供應名稱 其中2個承包商名稱不同 – user3436223

回答

0

據我所知,它不可能在對顯示...在兩列的單個文件打印是通過回答以下suggeted

只需加入land_plant_TablePlant_TableLandscaper_Table基於LnumLnum和過濾器使用where條款中的用品。

像這樣的(基於更新之前的最後一個表格模式!)做

通過連接通過子查詢

select lt.lname, pt.plant 
from plant_table pt 
inner join land_plant_Table lpt on lpt. snum = ct.snum 
inner join Landscaper_Table lt on lpt.lnum = lt.lnum 
where pt.plant='rose' /* or pt.plant IN ('rose','willow','blah','blah','blah')*/ 

1日取的snum - >然後基於snum,獲取lnum - >基於lnum,獲取lname

select lname from Landscaper_table where lnum in ( 
    select lnum from land_plant_table where lnum in (
      select snum from plant_table where plant IN ('rose','willow','blah','blah','blah') 
) 
1

由於您沒有提到數據庫,我已經使用sql server解決了它。

select plant, 
max(case when row='1' then name end) L1, 
max(case when row='2' then name end) L2, 
max(case when row='3' then name end) L3 
from 
(
select lt.lname as name, pt.plant as plant, 
    row_number() over(partition by pt.plant order by pt.plant) as row 
from plant_table pt 
inner join land_plant_Table lpt on lpt. snum = pt.snum 
inner join Landscaper_Table lt on lpt.lnum = lt.lnum 
) as s 
group by plant 

fiddle