有 2 个表: 需要查询表 1 的 date 字段得到日期数值,然后再去表 2 里找该日期数字对应的字段名,将找到的字段名对应的值 Join 回表一。感觉要用动态 SQL,求启发。
附上 2 个表的截图:
表 1:

表 2:

上面可能说得太抽象,看图说话,表 1 里的第 3 行数据,对应的 date 是 2018-10,那么就要去表二里筛选过的行里的‘ 2018-10 ’这一列,把对应的值 Join 回表 1 里。
有 2 个表: 需要查询表 1 的 date 字段得到日期数值,然后再去表 2 里找该日期数字对应的字段名,将找到的字段名对应的值 Join 回表一。感觉要用动态 SQL,求启发。
附上 2 个表的截图:
表 1:

表 2:

上面可能说得太抽象,看图说话,表 1 里的第 3 行数据,对应的 date 是 2018-10,那么就要去表二里筛选过的行里的‘ 2018-10 ’这一列,把对应的值 Join 回表 1 里。
|
miceanJul 12, 2019
1
写成存储过程?
|
|
niubee1Jul 12, 2019
3
超过标准 SQL 的纲了。干嘛老想着一条 SQL 打天下
|
|
c6h6benzeneJul 12, 2019 via iPad
4
图倒是都挂了…是要 201810 对应的列名?
|
|
5
@c6h6benzene ‘ 2018-10 ’就会是列名,要把这个值 Join 回表 1。 这个问题的复杂性在于,每一个记录都可能对应表 2 里不同的列名,因为它取决于每个记录的 date 值。
|
|
reusJul 13, 2019
6
谁设计这个表的,真的应该开除
|
|
mengyaoss77Jul 13, 2019 via Android
7
写个脚本列变行吧
|
|
widewingJul 13, 2019 via Android
8
crosstab 吧
|
|
c6h6benzeneJul 13, 2019 via Android
9
@nuistzhou 后来看到图了。可能你放到 Excel 里面 HLOOKUP 会比较快。
|
|
beginorJul 13, 2019 via Android
10
表 1 crosstab 将日期行转列, 然后再和表 2 进行关联, 或者直接对表 2 进行 SQL 拼接进行嵌套查询, 应该都可以做到, 个人认为算是中等难度吧。
|
|
AksuraJul 14, 2019
11
@nuistzhou 表 2 这种在数据仓库里挺常见的,建议楼主先把表 2 做行列转换,使日期字段名变为一列值,再与表 1 JOIN。这个在 Oracle 里用 pivot/unpivot,PostgreSQL 里建议安装 tablefunc 这个 extension (服务端安装时自带的),用它的 crosstab 函数。
|
|
LeeSeoungJul 14, 2019
12
楼上正解。。关键就是行转列 列转行
|
|
CRVVJul 17, 2019
13
select table1.date, to_json(table2)->table1.date as v from table1 cross join table2 order by 1;
需要再处理一下 date 转成 TEXT 类型 |