MS- SQL получение значений регистра c - PullRequest
0 голосов
/ 02 августа 2020

У нас есть таблица LogicalTableSharing следующего вида:

enter image description here

For a specific requirement, we need to take PhysicalCompany of each TableCode into a variable. We tried a case-based query as follows:

declare @tablecode varchar(50)
declare @inputcompany varchar(50)

declare @query nvarchar(2500)


set @inputcompany= 91


set @query = '
select '''+@inputcompany+''' AS inputcompany,
       CASE WHEN lts.TableCode = ''tsctm005'' THEN lts.PhysicalCompany ELSE NULL END as tsctm005_company,
       CASE WHEN lts.TableCode = ''tccom000'' THEN lts.PhysicalCompany ELSE NULL END as tccom000_company
from LogicalTableSharing lts
where  lts.LogicalCompany = '''+@inputcompany+'''
'
EXEC sp_executesql @query

which obviously gives the result as

enter image description here

The desired output is

введите описание изображения здесь

Какой подход правильный?

1 Ответ

0 голосов
/ 02 августа 2020

Попробуйте подзапросы в FROM без SELECT. Для повышения производительности вам нужен индекс (logicalcompany, tablecode) (или наоборот, в зависимости от того, какой из них более избирательный).

SELECT @inputcompany inputcompany,
       (SELECT TOP 1
               physicalcompany
               WHERE logicalcompany = @inputcompany
                     AND tablecode = 'tsctm005'
               ORDER BY <some criteria>) tsctm005_company,
       (SELECT TOP 1
               physicalcompany
               WHERE logicalcompany = @inputcompany
                     AND tablecode = 'tccom000'
               ORDER BY <some criteria>) tccom000_company;

Вы должны найти <some criteria> для упорядочивания в случае нескольких возможных строк, чтобы решить который имеет приоритет. Если вам просто не нужен случайный запрос, возможно, каждый раз, когда вы запускаете другой запрос, то есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...