首页 > 解决方案 > SQL - 如何在查询中为每个数据变化添加虚拟空白数据?

问题描述

我得到了这个我计划在 SQL 查询中使用的 SQL 表:

| Code_1 | Name_1 | Code_2 | Name_2 | Code_3 | Name_3 | Code_4 | Name_4 |
-------------------------------------------------------------------------
|  A01   | Alice  |  B01   | Bernie |  C01   | Charle |  D01   | Dean   |
|  A01   | Alice  |  B01   | Bernie |  C01   | Charle |  D02   | Donny  |
|  A01   | Alice  |  B01   | Bernie |  C02   | Claire |  E01   | Ellie  |

'and so on

在我的查询中,我想:

  1. 将代码和名称合并成一个字符串。
  2. 显示代码和合并的代码 + 名称字符串。
  3. 添加一个虚拟行,其中Code_4Name_4为空白。

像这样:

| Code_1 |    Name_1    | Code_2 |    Name_2    | Code_3 |    Name_3    | Code_4 |    Name_4    |
-------------------------------------------------------------------------------------------------
|  A01   | A01 - Alice  |  B01   | B01 - Bernie |  C01   | C01 - Charle |        |              |
|  A01   | A01 - Alice  |  B01   | B01 - Bernie |  C01   | C01 - Charle |  D01   | D01 - Dean   |
|  A01   | A01 - Alice  |  B01   | B01 - Bernie |  C01   | C01 - Charle |  D02   | D02 - Donny  |
|  A01   | A01 - Alice  |  B01   | B01 - Bernie |  C02   | C02 - Claire |        |              |
|  A01   | A01 - Alice  |  B01   | B01 - Bernie |  C02   | C02 - Claire |  E01   | E01 - Ellie  |

'and so on

到目前为止我的查询:

select distinct [Code_1], [Code_1] + ' - ' + [Name_1] as [Name_1],
                [Code_2], [Code_2] + ' - ' + [Name_2] as [Name_2],
                [Code_3], [Code_3] + ' - ' + [Name_3] as [Name_3],
                [Code_4], [Code_4] + ' - ' + [Name_4] as [Name_4] from [SQLIOT].[dbo].[NAMES]

我仍然不知道如何为Code_4&放置空白的虚拟行Name_4

标签: sqlsql-server-2008

解决方案


你似乎想要union all

select [Code_1], [Code_1] + ' - ' + [Name_1] as [Name_1],
       [Code_2], [Code_2] + ' - ' + [Name_2] as [Name_2],
       [Code_3], [Code_3] + ' - ' + [Name_3] as [Name_3],
       [Code_4], [Code_4] + ' - ' + [Name_4] as [Name_4]
from [SQLIOT].[dbo].[NAMES]
union all
select distinct [Code_1], [Code_1] + ' - ' + [Name_1] as [Name_1],
       [Code_2], [Code_2] + ' - ' + [Name_2] as [Name_2],
       [Code_3], [Code_3] + ' - ' + [Name_3] as [Name_3],
       NULL as [Code_4], NULL as [Name_4]

根据您的示例数据,您不需要select distinct整体数据,只需要具有空列的部分。


推荐阅读