【发布时间】:2023-02-25 12:39:29
【问题描述】:
我正在尝试在 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 类型。我试图将它们转换为字符串,如下所示,但没有结果。
有人对这个问题有想法吗?
结果样本:
| Category | ParentGuid | EnfantGuid | Path | 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 | NULL | NULL | NULL | NULL | NULL |
在这一行路径必须包含EnfantGuid_1+EnfantGuid_2但它只有Enfant_Guid1==> 最后一个CASE WHEN条件
【问题讨论】:
-
Serverless SQL pool in Azure Synapse Analytics 是一个 SQL Server 变体,因此 SQL Server 标记在 IMO 中很好。
-
出于某种原因,在我看来,这是要在运行时执行的“case-when”的“else”部分。您能否出于好奇将 WHEN 子句更改为始终为真?
-
我不这么认为!因为当我像这样更改列的顺序时 (EnfantGuid_2,EnfantGuid_1) 我找到了第一列所以我确定它执行了这个 CASE
标签: sql sql-server concatenation string-concatenation azure-synapse