SQL文,将多行信息在一行里显示-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

2016-06-29 14:00:58 1654 1

我僵硬的实现了需求,但是肯定有更好的写法,求指教。
下边的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=

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:49:04

    下边的比之前硬写多动了动脑子- -查询速度提高很多。
    希望有高手写出更好的方式。

    全选复制放进笔记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

    0 0
相关问答

2

回答

php显示没有权限写文件怎么办?

2022-06-23 14:06:43 344浏览量 回答数 2

1

回答

FlinkSQL 窗口内排序使用方法疑问

2021-12-06 15:24:04 480浏览量 回答数 1

0

回答

试图从多个文本文件中获取信息以显示在表格中

2019-12-09 15:50:21 284浏览量 回答数 0

1

回答

SSH无法登陆,权限禁止

2018-11-14 16:19:34 272浏览量 回答数 1

1

回答

为什么查不到whois 邮箱信息

2018-01-04 02:28:33 634浏览量 回答数 1

6

回答

我的ICP备案信息不显示

2016-11-13 13:41:08 2921浏览量 回答数 6

2

回答

建议工单售后客服增加工号显示

2016-10-10 09:56:32 4700浏览量 回答数 2

1

回答

php文件中执行print_r($_POST)时,显示Array(),为什么呢?

2016-04-09 16:05:07 3300浏览量 回答数 1

1

回答

为什么这两次买的杭州和青岛机房的IP都是显示北京的?

2014-03-04 22:29:38 7542浏览量 回答数 1

1

回答

邮箱显示问题

2013-11-18 17:52:32 6995浏览量 回答数 1
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载