将单行的值显示为多个列

时间:2014-03-19 06:20:46

标签: sql

我需要创建一个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

我该怎么做?

2 个答案:

答案 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

fiddle

答案 1 :(得分:0)

据我所知,它不可能成对显示......两列中的单个文件打印由以下答案建议

根据land_plant_TablePlant_Table加入Landscaper_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' )*/

通过子查询:

第一次获取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' )
)