我正在尝试在 Azure Synapse Serverless 上使用
WHEN
条件对某些列进行 concat,但是有一个问题,在这个新专栏中它每次只显示一列并且 concat 函数不起作用。
代码如下:
SELECT
Categorie, ParentGuid,
COALESCE(CAST(EnfantGuid_7 AS nvarchar(1000)),
CAST(EnfantGuid_6 AS nvarchar(1000)),
CAST(EnfantGuid_5 AS nvarchar(1000)),
CAST(EnfantGuid_4 AS nvarchar(1000)),
CAST(EnfantGuid_3 AS nvarchar(1000)),
CAST(EnfantGuid_2 AS nvarchar(1000)),
CAST(EnfantGuid_1 AS nvarchar(1000))) EnfantGuid,
CASE
WHEN EnfantGuid_7 IS NOT NULL
THEN CONCAT_WS(', ', CAST(EnfantGuid_1 AS nvarchar(1000)), CAST(EnfantGuid_2 AS nvarchar(1000)), CAST(EnfantGuid_3 AS nvarchar(1000)), CAST(EnfantGuid_4 AS nvarchar(1000)), CAST(EnfantGuid_5 AS nvarchar(1000)), CAST(EnfantGuid_6 AS nvarchar(1000)))
WHEN EnfantGuid_6 IS NOT NULL
THEN CONCAT_WS(', ', EnfantGuid_1, EnfantGuid_2, EnfantGuid_3, EnfantGuid_4, EnfantGuid_5)
WHEN EnfantGuid_5 IS NOT NULL
THEN CONCAT_WS(', ',EnfantGuid_1, EnfantGuid_2, EnfantGuid_3, EnfantGuid_4)
WHEN EnfantGuid_4 IS NOT NULL
THEN CONCAT_WS(', ',EnfantGuid_1, EnfantGuid_2, EnfantGuid_3)
WHEN EnfantGuid_3 IS NOT NULL
THEN CONCAT_WS(', ', CAST(EnfantGuid_2 AS nvarchar(1000)), CAST(EnfantGuid_1 AS nvarchar(1000)))
ELSE EnfantGuid_1
END AS [Path],
EnfantGuid_1, EnfantGuid_2, EnfantGuid_3
CASE WHEN
条件内的所有列都是UniqueIdentifier
类型。我试图将它们转换为如下所示的字符串,但没有结果..
有人知道这个问题吗?
结果样本:
类别 | 家长指导 | 儿童指南 | 路径 | EnfantGuid_1 | EnfantGuid_2 | EnfantGuid_3 | EnfantGuid_4 | EnfantGuid_5 | EnfantGuid_6 | EnfantGuid_7 | |
---|---|---|---|---|---|---|---|---|---|---|---|
a | 432025b5-5a5b | 36d9d9b3-5a5b | c4cae4b5-5a5b | c4cae4b5-5a5b | 66d9d9b3-5a5b | 36d9d9b3-5a5b | 空 | 空 | 空 | 空 | 空 |
在这一行 Path 必须包含 EnfantGuid_1 + EnfantGuid_2 但它只有 Enfant_Guid1 ==> 最后一个
CASE WHEN
条件
将 else 部分中的 EnfantGuid_1 字段的数据类型转换为 varchar 数据类型。当使用 case when 语句定义新列时,该列的数据类型是 else 部分中表达式的数据类型。
case when .....
......
ELSE
CAST(EnfantGuid_1 AS nvarchar(1000))
END AS [Path]
我用样本数据试过了。
create table tab1 ( v1 uniqueidentifier null, v2 uniqueidentifier null, v3 uniqueidentifier null, v4 uniqueidentifier null)
insert into tab1 values(newid(),newid(),newid(),newid());
insert into tab1 values(newid(),newid(),newid(),null);
insert into tab1 values(newid(),newid(),null,null);
select * from tab1
v1 | v2 | v3 | v4 |
---|---|---|---|
d9a9b947-6c4f-47bb-b88b-d59d6e50a611 | ee3d9a9e-1b13-4189-9aa2-01a27c917cf8 | 2f0f4ae0-2251-45d2-8428-44061a6d84eb | 586df0a6-7663-4130-9bb1-e69cb61265d1 |
10e06207-39f6-4de1-b172-f8f42274c3fa | 0d14106c-06b7-4218-a396-574c5d48157b | fbd952ef-5364-4d87-8473-b0545cf5ed59 | 空 |
6f957995-8717-4bc7-8d75-0bd7d195a6c5 | c2128d35-5b6f-4b60-bb75-f2b4f6a28ad7 | 空 | 空 |
Else中的表达式是uniqueidentifier类型:
select
case
when v4 is not null
then concat_ws(', ', v1, v2, v3)
when v3 is not null
then concat_ws(', ', v1, v2)
else
v1
end as concat_column
from tab1
concat_column |
---|
d9a9b947-6c4f-47bb-b88b-d59d6e50a611 |
10e06207-39f6-4de1-b172-f8f42274c3fa |
6f957995-8717-4bc7-8d75-0bd7d195a6c5 |
Else中的表达式是varchar类型:
select
case when v4 is not null
then concat_ws(', ', v1, v2,v3)
when v3 is not null
then concat_ws(', ', v1, v2)
else
cast(v1 as varchar(100))
end as concat_column
from tab1
concat_column |
---|
D9A9B947-6C4F-47BB-B88B-D59D6E50A611, EE3D9A9E-1B13-4189-9AA2-01A27C917CF8, 2F0F4AE0-2251-45D2-8428-44061A6D84EB |
10E06207-39F6-4DE1-B172-F8F42274C3FA, 0D14106C-06B7-4218-A396-574C5D48157B |
6F957995-8717-4BC7-8D75-0BD7D195A6C5 |