【问题标题】:SQL blank rows between rowsSQL 行之间的空白行
【发布时间】:2020-04-08 10:56:50
【问题描述】:

我试图在每一行之后输出一个空白行。

例如:

SELECT id,job,amount FROM table

+----+-----+--------+
| id | job | amount |
+----+-----+--------+
|  1 | 100 |    123 |
|  2 | 200 |    321 |
|  3 | 300 |    421 |
+----+-----+--------+

致以下:

+----+-----+--------+
| id | job | amount |
+----+-----+--------+
|  1 | 100 |    123 |
|    |     |        |
|  2 | 200 |    321 |
|    |     |        |
|  3 | 300 |    421 |
+----+-----+--------+

我知道我可以用 UNION 做类似的事情,例如:

SELECT null AS id, null AS job, null AS amount
UNION
SELECT id,job,amount FROM table

这会在开始时给我一个空白行,但是对于我的生活,我无法弄清楚如何每隔一行做一次。嵌套的 SELECT/UNION? - 尝试过,但似乎没有任何效果。

DBMS 是 SQL Server 2016

【问题讨论】:

  • 你为什么要那样做?一般来说,这类数据显示问题最好在应用端处理。
  • 我第二个@GMB。这听起来像XY problem?无论如何,请edit 问题并为您正在使用的 DBMS 添加一个标签,并说明哪一列定义了顺序。可能是id
  • 它用于集成,无论出于何种原因,其中一方都需要空行。我无法捕获数据并在 SQL 查询之外对其进行修改。这是直接连接。

标签: sql sql-server select null sql-order-by


【解决方案1】:

这是一个 akward 要求,很可能在应用程序端处理得更好。但是,这是一种方法:

select id, job, amount
from (
    select id, job, amount, id order_by from mytable
    union all 
    select null, null, null, id from mytable
) t
order by order_by, id desc

诀窍是在unioned 查询中添加一个附加列,该列跟踪原始id,并可用于对外部查询中的记录进行排序。然后,您可以使用id desc 作为第二个排序条件,这会将null 值放在第二个位置。

Demo on DB Fiddle

with mytable as (
    select 1 id, 100 job, 123 amount
    union all select 2, 200, 321
    union all select 3, 300, 421
)
select id, job, amount
from (
    select id, job, amount, id order_by from mytable
    union all 
    select null, null, null, id from mytable
) t
order by order_by, id desc;
编号 |工作 |数量 ---: | ---: | -----: 1 | 100 | 123 | | 2 | 200 | 321 | | 3 | 300 | 421 | |

【讨论】:

    【解决方案2】:

    在 SQL Server 中,您可以使用 apply:

    select v.id, v.job, v.amount
    from t cross apply
         (values (id, job, amount, id, 1),
                 (null, null, null, id, 2)
         ) v(id, job, amount, ord1, ord2)
    order by ord1, ord2;
    

    【讨论】:

      猜你喜欢
      • 2022-06-15
      • 1970-01-01
      • 2023-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多