在 sql 服务器的视图中组合多个 UNION
combining multiple UNION inside a view in sql server
我想创建如下视图。
Create view SomeView
AS
SELECT DISTINCT ISNULL(ID,'ID') as Id,
ISNULL(ID,'unknown') + ':' + 'ID' AS label,
ISNULL(ID,'unknown') AS [value]
FROM [test].[emp].[OrgView]
UNION
SELECT DISTINCT ISNULL(EMP_ID,'ID') as Id,
ISNULL(EMP_ID,'unknown') + ':' + 'EMP_ID' AS label,
ISNULL(EMP_ID,'unknown') AS [value]
FROM [test].[emp].[OrgView]
UNION
SELECT DISTINCT ISNULL(LICENSE_NO,'LICENSE_NO') as Id,
ISNULL(LICENSE_NO,'unknown') + ':' + 'LICENSE_NO' AS label,
ISNULL(LICENSE_NO,'unknown') AS [value]
FROM [test].[emp].[OrgView]
.
.
.
.
.
10 such selects
所以在这种情况下,是为每个 select 块调用一次还是只调用一次? 我不希望每个 select 进行 10 次不同的调用。如果你知道,请给我指出一些在线资源。
逆轴使用 APPLY
:
SELECT DISTINCT COALESCE(v.ID, v.id_default) as Id,
COALESCE(o.FIRST_NAME, 'unknown') + ':' + v.name_suffix AS label,
COALESCE(o.VALUE, 'unknown') AS [value]
FROM [test].[emp].[OrgView] o CROSS APPLY
(VALUES (o.ID, 'ID', 'Unknown'),
(o.EMP_ID, 'ID', 'EMP'),
(o.LICENSE, 'LICENSE_NO', 'LICENSE_NO'), . . .
) v(ID, id_default, name_suffix);
我想创建如下视图。
Create view SomeView
AS
SELECT DISTINCT ISNULL(ID,'ID') as Id,
ISNULL(ID,'unknown') + ':' + 'ID' AS label,
ISNULL(ID,'unknown') AS [value]
FROM [test].[emp].[OrgView]
UNION
SELECT DISTINCT ISNULL(EMP_ID,'ID') as Id,
ISNULL(EMP_ID,'unknown') + ':' + 'EMP_ID' AS label,
ISNULL(EMP_ID,'unknown') AS [value]
FROM [test].[emp].[OrgView]
UNION
SELECT DISTINCT ISNULL(LICENSE_NO,'LICENSE_NO') as Id,
ISNULL(LICENSE_NO,'unknown') + ':' + 'LICENSE_NO' AS label,
ISNULL(LICENSE_NO,'unknown') AS [value]
FROM [test].[emp].[OrgView]
.
.
.
.
.
10 such selects
所以在这种情况下,是为每个 select 块调用一次还是只调用一次? 我不希望每个 select 进行 10 次不同的调用。如果你知道,请给我指出一些在线资源。
逆轴使用 APPLY
:
SELECT DISTINCT COALESCE(v.ID, v.id_default) as Id,
COALESCE(o.FIRST_NAME, 'unknown') + ':' + v.name_suffix AS label,
COALESCE(o.VALUE, 'unknown') AS [value]
FROM [test].[emp].[OrgView] o CROSS APPLY
(VALUES (o.ID, 'ID', 'Unknown'),
(o.EMP_ID, 'ID', 'EMP'),
(o.LICENSE, 'LICENSE_NO', 'LICENSE_NO'), . . .
) v(ID, id_default, name_suffix);