У меня есть сценарий, в котором мне нужно создать представление, которое имеет кучу СОЕДИНЕНИЙ различных операторов выбора.
SELECT DISTINCT ISNULL(ID,'ID') as Id,
ISNULL(FIRST_NAME,'unknown') + ':' + 'Unknown' AS label,
ISNULL(VALUE,'unknown') AS [value]
FROM [test].[emp].[OrgView]
UNION
SELECT DISTINCT ISNULL(EMP_ID,'ID') as Id,
ISNULL(LAST_NAME,'unknown') + ':' + 'Unknown' AS label,
ISNULL(VALUE,'unknown') AS [value]
FROM [test].[emp].[OrgView]
UNION
SELECT DISTINCT ISNULL(LICENSE,'ID') as Id,
ISNULL(COMPANY,'unknown') + ':' + 'Unknown' AS label,
ISNULL(VALUE,'unknown') AS [value]
FROM [test].[emp].[OrgView]
.
.
.
.
.
10 such selects
Я пытаюсь использовать временные переменные и временные таблицы, чтобы избежать 10 различных вызовов база данных, но похоже, что они не работают в представлении, как показано ниже.
Create View [test].[emp].[MainView]
AS
select * into #tempTable from [test].[emp].[OrgView]
SELECT DISTINCT ISNULL(ID,'ID') as Id,
ISNULL(FIRST_NAME,'unknown') + ':' + 'Unknown' AS label,
ISNULL(VALUE,'unknown') AS [value]
FROM #tempTable
UNION
SELECT DISTINCT ISNULL(EMP_ID,'ID') as Id,
ISNULL(LAST_NAME,'unknown') + ':' + 'Unknown' AS label,
ISNULL(VALUE,'unknown') AS [value]
FROM #tempTable
UNION
SELECT DISTINCT ISNULL(LICENSE,'ID') as Id,
ISNULL(COMPANY,'unknown') + ':' + 'Unknown' AS label,
ISNULL(VALUE,'unknown') AS [value]
FROM #tempTable
Невозможно использовать общее табличное выражение (CTE) также с указанным выше запросом, поскольку оно будет доступно только для одного поиска, а не для остальных 9.
Как лучше сделать это на Sql сервере?