sql查询结果格式
Posted
技术标签:
【中文标题】sql查询结果格式【英文标题】:sql query result format 【发布时间】:2018-08-10 15:41:25 【问题描述】:很抱歉给您带来不便,我以为我是在简化问题,但可能是我让它变得更复杂了,以前的数据是这样的,
表格:
BRANCHCD BAL1 BAL2 ACMCD
SH14 10 - 111
SH14 11 - 112
SH14 - 1 211
在一张桌子上,acmcd 有 bal1,acmcd 有 bal2,一次只有一个,所以不用担心这种情况,所以我需要以下格式。
BRANCHCD BAL1 ACMCD bal2 acmcd
SH14 10 111 1 211
SH14 11 112
如果表中添加的新行是:
BRANCHCD BAL1 BAL2 ACMCD
SH14 2 212
SH14 3 213
那么o/p应该是
BRANCHCD BAL1 ACMCD bal2 acmcd
SH14 10 111 1 211
SH14 11 112 2 212
SH14 3 213
【问题讨论】:
试试***.com/questions/26425157/… 感谢您的回复,我已经尝试过了,它对我的情况没有多大用处.. 我不明白为什么 bal2 和 ACMCD 应该为空?你加入的逻辑是什么? 当我将 tbl1 与 tbl2 和 tbl1 分别与 tbl3 连接时,我有 2 行来自第一个连接和 1 行来自 2nd 只需要合并它们并获得以上结果。 @Vaibhav 为什么第二行没有来自第三个表的数据?为什么第二行没有第三个表中的值而第一个没有?你怎么知道什么时候应该加入行,什么时候不应该加入 【参考方案1】:我认为您想要的输出基本上是压缩新记录以显示它们并列而不是下面的新条目。因此,acmcd = 112
和 acmcd = 212
之间没有任何关系,除了它们是表中 branchcd
的相应“bal”下的第二个可用条目。似乎列acmcd
为每个新添加的行(按顺序或不按顺序)获取唯一值。
如果上述陈述为真,您可以使用row_number()
为给定BRANCHCD
的每个唯一acmcds
生成ID。通过 cte 或子查询将 bal1 和 bal2 记录创建为单独的数据集,我们可以在 row_number
上执行 FULL OUTER JOIN
。
SQL Fiddle
查询:
WITH a
AS (SELECT row_number()
OVER(
partition BY branchcd
ORDER BY acmcd ) AS rn,
t.*
FROM t
WHERE bal1 IS NOT NULL),
b
AS (SELECT row_number()
OVER(
partition BY branchcd
ORDER BY acmcd ) AS rn,
t.*
FROM t
WHERE bal2 IS NOT NULL)
SELECT COALESCE(a.branchcd,b.branchcd) as branchcd,
a.bal1,
a.acmcd,
b.bal2,
b.acmcd
FROM a
FULL OUTER JOIN b
ON ( a.branchcd = b.branchcd
AND a.rn = b.rn )
Results:
| BRANCHCD | BAL1 | ACMCD | BAL2 | ACMCD |
|----------|--------|--------|------|-------|
| SH14 | 10 | 111 | 1 | 211 |
| SH14 | 11 | 112 | 2 | 212 |
| SH14 | (null) | (null) | 3 | 213 |
【讨论】:
【参考方案2】:除非您的表格有更多您不与我们共享的列,否则您似乎需要在表格 C 的左连接中添加一些比较 ACMCD 的最后两位数字的内容。否则,您不会向查询提供有关这些记录如何相关的任何指示。
【讨论】:
抱歉给您带来不便,请检查问题,我已编辑以上是关于sql查询结果格式的主要内容,如果未能解决你的问题,请参考以下文章