SQL множественный выбор из другого запроса выбора - PullRequest
1 голос
/ 13 июня 2019

Есть ли способ сделать выбор из одного Select в Microsoft SQL Server?

Что-то вроде:

SELECT id, type, name, address  
FROM Persons AS Persons_DATA 
WHERE (name='...' OR name in ('...','...'))

SELECT TOP 1 'Best Vendor : '+name from Persons_DATA where type=1 order by ...
union SELECT TOP 1 'Best Customer : '+name from Persons_DATA where type=2 order by ...
union SELECT TOP 1 'Least Debt : '+name from Persons_DATA where ... order by ...
union SELECT TOP 1 'Most Debt : '+name from Persons_DATA where ... order by ...
...

Я знаю, что могу сделать:

SELECT TOP 1 
    'Best Vendor : '+name 
FROM
    Persons 
WHERE
    type = 1 AND (name='...' OR name in ('...','...')) 
ORDER BY ...

UNION

SELECT TOP 1 
    'Best Customer : '+name 
FROM
    Persons 
WHERE
    type = 2 
    AND (name='...' OR name in ('...','...')) 
ORDER BY ...

Но я думаю, что это займет больше времени, потому что это сделает много ненужных поисков в большой базе данных

но первый код будет выполнять только 1 поиск в большой базе данных, а X - в небольшой базе данных, и это займет меньше времени .... я прав?

1 Ответ

2 голосов
/ 13 июня 2019

Вы можете использовать оператор CASE WHEN ..

SELECT CASE WHEN type=1 THEN 'Best Vendor : '+name 
   WHEN type=2 THEN 'Best Customer: '+name 
    WHEN type=3 THEN 'Least Debt: '+name 
     WHEN type=4 THEN 'Most Debt: '+name ELSE '....'  END  
from Persons  A 
LEFT JOIN (SELECT RANK() OVER (PARTITION BY type ORDER BY id DESC) Rk, name from Persons    
        WITH(NOLOCK) ) AS PS  ON PS.Id = A.id   and Rk=1   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...