首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将单行的值显示为多列

将单行的值显示为多列
EN

Stack Overflow用户
提问于 2014-03-19 14:20:46
回答 2查看 59关注 0票数 2

我需要创建sql,它将列出具有相同植物的对

有3张桌子

代码语言:javascript
复制
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

我需要列出成对的承包商,以及库存相同物资的承包商的物资名称。

我想要的结果的一个例子是

代码语言:javascript
复制
Landscaper1    Landscaper2       Landscaper 3          Plant
  Dr plant      George Gardener     Plant Scaper           Rose
  Plant Scaper  George Gardener      ---                  Lilly

我该怎么做呢?

EN

回答 2

Stack Overflow用户

发布于 2014-03-19 18:42:59

由于您没有提到数据库,我使用sql server解决了它。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-03-19 15:39:29

据我所知,成对打印是不可能的……在两列中打印单个文件建议使用以下答案

只需将land_plant_Table与基于LnumLnumPlant_TableLandscaper_Table连接起来,并使用where子句中的供应品过滤掉。

下面这样就行了(基于更新之前的最后一个表模式!)

via加入

代码语言:javascript
复制
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

代码语言:javascript
复制
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' )
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22497848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档