Sql 将单行的值显示为多列
我需要创建sql,它将列出具有相同工厂的配对 有三张桌子Sql 将单行的值显示为多列,sql,Sql,我需要创建sql,它将列出具有相同工厂的配对 有三张桌子 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 s
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
我怎样才能做到这一点呢?据我所知,不可能成对显示……下面的答案建议将一个文件打印成两列 只需基于
Lnum
和Lnum
将land\u plant\u表
与plant\u表
连接,并使用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' )
)
因为您没有提到数据库,所以我使用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
请正确描述模式。举例说明您想要的结果。举例说明我想要的结果是contractor 1 contractor 2 Supplies Cname Cname Supply name,其中两个承包商名称不同。对不起,我还不知道如何在这里正确地格式化。你能给出一些示例数据和预期结果吗。请编辑您的问题(编辑链接位于标签下方的左下角),因为您可能希望使用
{}
按钮格式化这些数据,以便向我们显示一个表,这在注释中是不可能做到的。