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 = 112acmcd = 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查询结果格式的主要内容,如果未能解决你的问题,请参考以下文章

获取不带表格格式的SQL查询结果

plsql如何设置查询结果格式化

sql查询结果格式

sql语句查询结果想打印出来,格式能不能调整啊?怎么弄啊

SQL对查询结果进行分组

sql语句怎样将查询结果逗号分开