开发者社区> 问答> 正文

SQL文,将多行信息在一行里显示

我僵硬的实现了需求,但是肯定有更好的写法,求指教。
下边的3个表内容是我随意写的,表设计的实际合理性请无视。
关于SQL文运行环境问题,各位的答案任何数据库都可以,我自己脑补成我需求的环境文法就可以了。

需求:
一件商品的所有表信息在一行里表示

表:
table1
商品ID(PK),商品名,价格,规格
table2
商品ID(PK),供应商(PK),供货日期,保存时间
table3
商品ID(PK), 责任担当,部门

条件:
供应商固定有4个(a,b,c,d),每个商品ID都由4个供应商同时供应。

我现在的写法:

SELECT
t1.商品ID, t1.商品名, t1.价格, t1.规格,
t3.责任担当, t3.部门,
ta.供应商 供应商a, ta.供货日期 供货日期a, ta.保存时间 保存时间a,
tb.供应商 供应商b, tb.供货日期 供货日期b, tb.保存时间 保存时间b,
tc.供应商 供应商c, tc.供货日期 供货日期c, tc.保存时间 保存时间c,
td.供应商 供应商d, td.供货日期 供货日期d, td.保存时间 保存时间d
FROM
table1 t1,
table3 t3,
(SELECT 商品ID,供应商,供货日期,保存时间 FROM table2 WHERE 供应商 = a) ta,
(SELECT 商品ID,供应商,供货日期,保存时间 FROM table2 WHERE 供应商 = b) tb,
(SELECT 商品ID,供应商,供货日期,保存时间 FROM table2 WHERE 供应商 = c) tc,
(SELECT 商品ID,供应商,供货日期,保存时间 FROM table2 WHERE 供应商 = d) td
WHERE
ta.商品ID=t1.商品ID AND ta.商品ID=t3.商品ID AND ta.商品ID=tb.商品ID AND ta.商品ID=tc.商品ID AND ta.商品ID=

展开
收起
a123456678 2016-06-29 14:00:58 1945 0
1 条回答
写回答
取消 提交回答
  • 下边的比之前硬写多动了动脑子- -查询速度提高很多。
    希望有高手写出更好的方式。

    全选复制放进笔记SELECT

    t1.商品ID, t1.商品名, t1.价格, t1.规格, 
    t3.责任担当, t3.部门, 
    MAX(subT.供应商a), MAX(subT.供货日期a), MAX(subT.保存时间a),
    MAX(subT.供应商b), MAX(subT.供货日期b), MAX(subT.保存时间b),
    MAX(subT.供应商c), MAX(subT.供货日期c), MAX(subT.保存时间c),
    MAX(subT.供应商d), MAX(subT.供货日期d), MAX(subT.保存时间d)

    FROM

    (table1 t1

    LEFT JOIN

    table3 t3

    ON t1.商品ID=t3.商品ID)
    LEFT JOIN

    (
    SELECT  
        table2.商品ID 商品ID,
        iif(table2.供应商='a',供应商,Null) 供应商a,
        iif(table2.供应商='a',供货日期,Null) 供货日期a,
        iif(table2.供应商='a',保存时间M,Null) 保存时间a,
        iif(table2.供应商='b',供应商,Null) 供应商b,
        iif(table2.供应商='b',供货日期,Null) 供货日期b,
        iif(table2.供应商='b',供应商保存时间,Null) 保存时间b,
        iif(table2.供应商='c',供应商,Null) 供应商c,
        iif(table2.供应商='c',供货日期,Null) 供货日期c,
        iif(table2.供应商='c',供应商保存时间,Null) 保存时间c,
        iif(table2.供应商='d',供应商,Null) 供应商d,
        iif(table2.供应商='d',供货日期,Null) 供货日期d,
        iif(table2.供应商='d',供应商保存时间,Null) 保存时间d
    FROM 
        table2
    ORDER BY table2.商品ID
    ) subT

    ON t1.商品ID=subT.商品ID
    GROUP BY t1.商品ID

    2019-07-17 19:49:04
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载