Как получить разные имена столбцов с помощью оператора union в SQL - PullRequest
1 голос
/ 19 апреля 2019

Я ищу ошибки в моих данных;в разных столбцах таблицы.Я использую оператор UNION для одновременного выполнения нескольких запросов и поиска ошибок в таблице.Все найденные в таблице ошибки помещаются в один столбец под именем столбца самого первого запроса, в котором обнаружена ошибка.Есть ли способ разбить столбец таким образом, чтобы каждая найденная ошибка отдельным запросом в операторе UNION также представлялась как отдельный столбец / сущность?

Это код I 'm, используя:

SELECT DISTINCT
[1001account] 
FROM 
[Cris_Ocean_tmp].[dbo].[NiiStressTest2018_v2_PUBLISHED_201812_CC_0326]
WHERE
StresstestaccountEnabled LIKE '%Yes%' AND BalancesheetAmount <> 0
AND
PATINDEX('%[^0-9]%', [1001account]) > 0 OR [1001account] IS NULL

UNION

SELECT DISTINCT
[5028account] 
FROM 
[Cris_Ocean_tmp].[dbo].[NiiStressTest2018_v2_PUBLISHED_201812_CC_0326]
WHERE
StresstestaccountEnabled LIKE '%Yes%' AND BalancesheetAmount <> 0
AND
PATINDEX('%[^0-9]%', [5028account]) > 0 OR [5028account] IS NULL

UNION

SELECT DISTINCT
[BalanceSheetType] 
FROM
[Cris_Ocean_tmp].[dbo].[NiiStressTest2018_v2_PUBLISHED_201812_CC_0326]
WHERE
StressTestAccountEnabled LIKE '%Yes%' AND BalanceSheetAmount <> 0
AND
[BalanceSheetType] NOT LIKE '%Assets%'
AND
BalanceSheetType NOT LIKE '%Liabilities%'

UNION

SELECT DISTINCT 
CorepRRR 
FROM 
[Cris_Ocean_tmp].[dbo].[NiiStressTest2018_v2_PUBLISHED_201812_CC_0326]
WHERE 
StressTestAccountEnabled LIKE '%Yes%' AND BalanceSheetAmount<>0
AND
CorepRRR NOT LIKE '%D%'
AND
CorepRRR NOT LIKE '%R%'
AND
CorepRRR NOT LIKE '%P%'
AND
CorepRRR NOT LIKE '%Not Applicable%'

UNION

SELECT 
[CoreGroupId] 
FROM 
[Cris_Ocean_tmp].[dbo].[NiiStressTest2018_v2_PUBLISHED_201812_CC_0326]
WHERE 
StressTestAccountEnabled LIKE '%Yes%' AND BalanceSheetAmount<>0
AND
[CoreGroupId] NOT IN (2, 3, 4, 5, 6, 7, 8, 9, 11 ,14, 15, 99)

UNION

SELECT 
CoreGroupDescription 
FROM 
[Cris_Ocean_tmp].[dbo].[NiiStressTest2018_v2_PUBLISHED_201812_CC_0326]
WHERE 
StressTestAccountEnabled LIKE '%Yes%' AND BalanceSheetAmount<>0
AND
[CoreGroupDescription] NOT IN 
( 'DLL', 'ABB_Assets', 'ABB_Liab', 'LRDW', 'OBV', 'VRN', 'Force', 'ROB', 'HedgeAccounting', 'LRDW_US', 'CorepDefaultsCorrections', 'Corrections'  )

UNION

SELECT DISTINCT 
[Country] 
FROM 
[Cris_Ocean_tmp].[dbo].[NiiStressTest2018_v2_PUBLISHED_201812_CC_0326]
WHERE 
StressTestAccountEnabled LIKE 'Yes'
AND
BalanceSheetAmount <> 0 
AND
Country NOT LIKE '%[^a-z]%'
AND
(
LEN(Country)>2 OR LEN(Country)<2 
)

UNION

SELECT DISTINCT 
CountryOfRisk 
FROM 
[Cris_Ocean_tmp].[dbo].[NiiStressTest2018_v2_PUBLISHED_201812_CC_0326]
WHERE 
StressTestAccountEnabled LIKE 'Yes'
AND
BalanceSheetAmount != 0
AND
Country NOT LIKE '%[^a-z]%'
AND
(
LEN(Country)>2 OR LEN(Country)<2
)

UNION


SELECT DISTINCT 
InterestType
FROM 
[Cris_Ocean_tmp].[dbo].[NiiStressTest2018_v2_PUBLISHED_201812_CC_0326]
WHERE 
StressTestAccountEnabled LIKE 'Yes'
AND
BalanceSheetAmount <> 0
AND
InterestType NOT LIKE 'Fixed'
AND
InterestType NOT LIKE 'Floating'

UNION

SELECT DISTINCT
InterestRate
FROM 
[Cris_Ocean_tmp].[dbo].[NiiStressTest2018_v2_PUBLISHED_201812_CC_0326]
WHERE
BalanceSheetAmount <> 0
AND
StressTestAccountEnabled LIKE 'Yes'
AND
(
InterestRate > 20
OR
InterestRate < -2
)

UNION

SELECT DISTINCT 
LocalBalance
FROM 
[Cris_Ocean_tmp].[dbo].[NiiStressTest2018_v2_PUBLISHED_201812_CC_0326]
WHERE 
StressTestAccountEnabled LIKE 'Yes'
AND
BalanceSheetAmount <> 0
AND
LocalBalance IS NULL

Это пример вывода:

[1001account]
NULL
1 -19.4163150000
2 -17.4100000000
3 -7.0000000000
4 -6.0000000000

NULL классифицируется как ошибка в моем запросе и находится в столбце [1001account],но другие значения в строках 2, 3 и 4 принадлежат другому столбцу: Swaprates и Interestrates.

Как я могу визуализировать это так, чтобы пользователь мог видеть, что строки 2, 3 и 4 принадлежат другому столбцу?

1 Ответ

2 голосов
/ 19 апреля 2019

Просто добавьте второй столбец в список SELECT, который скажет вам, откуда берется значение:

SELECT DISTINCT
[1001account] AS [value], '1001account' AS [column]

То же самое для других столбцов:

SELECT DISTINCT
[5028account] AS [value], '5028account' AS [column]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...