我需要创建一个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 :(得分: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
答案 1 :(得分:0)
据我所知,它不可能成对显示......两列中的单个文件打印由以下答案建议
根据land_plant_Table
和Plant_Table
加入Landscaper_Table
Lnum
和Lnum
,并使用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' )*/
通过子查询:
第一次获取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' )
)