Итак, у меня есть проблема, когда я хочу отображать информацию из одной таблицы (в данном случае это базовая таблица учетных записей с описаниями учетных записей), в таблице есть несколько записей. Я хочу отображать только информацию для записи в этой таблице учетных записей, которая вызывается чаще всего в другой таблице. У меня есть эти два запроса, работающие в SQLS2019:

select GLA.AccountNo, AccountDescription
from GLAccounts GLA join InvoiceLineItems LI on GLA.AccountNo = LI.AccountNo 
group by gla.AccountNo, AccountDescription;


select TOP 1 AccountNo, Count(*) [Number of Line Items]  
from InvoiceLineItems 
group by Accountno
order by [Number of Line Items] desc

Таким образом, индивидуально они работают так, как ожидалось - я получаю всю необходимую информацию со страницы своих учетных записей. И если я запускаю второй запрос, я получаю один результат - учетную запись, к которой прикреплено больше всего строк счетов в другой таблице. Мне нужно связать эти два запроса, и я не могу этого понять. Я пробовал различные способы использования запроса 2 в качестве подзапроса в блоке where / has, я пробовал объединять таблицы в разных схемах, но не могу заставить его работать.

Я хочу иметь возможность запускать этот запрос, чтобы он просто возвращал столбцы AccountNo и Description из таблицы GLAccounts в зависимости от того, какой AccountNo имеет наибольшее количество счетов в таблице InvoiceLineItem. Это очень сбивает с толку, и я думаю, может быть, я на самом деле слишком много обдумываю и мне нужно что-то попроще, чего мне не хватает?

0
krzychostal 7 Июл 2021 в 01:36

3 ответа

Лучший ответ

Ваш первый запрос в значительной степени там, если я правильно понимаю:

select top (1) GLA.AccountNo, gla.AccountDescription
from GLAccounts GLA join
     InvoiceLineItems LI
     on GLA.AccountNo = LI.AccountNo 
group by gla.AccountNo, gAccountDescription
order by count(*) desc;
1
Gordon Linoff 6 Июл 2021 в 23:27

Похоже, вы хотите добавить счетчик позиций в список учетных записей. Вы можете попробовать что-то вроде этого

select GLA.AccountNo, AccountDescription, count(*) as [Number of Line Items] 
from GLAccounts GLA join InvoiceLineItems LI on GLA.AccountNo = LI.AccountNo 
group by gla.AccountNo, AccountDescription
order by count(*) desc;
0
SteveC 6 Июл 2021 в 23:30

Если я правильно понимаю, вы пытаетесь получить AccountNo с максимальным количеством исходных данных из InvoiceLineItems. Я использую CTE (общее табличное выражение) для вычисления количества элементов для каждого Accountno, а затем нахожу из него максимальное значение.

with list_account_with_count_items as (
    select AccountNo, Count(*) [Number of Line Items]  
    from InvoiceLineItems
    group by Accountno
)
select top(1) -- if you have more then 1 raw with same max_count_items
 GLA.AccountNo, AccountDescription, lawci.[Number of Line Items]
from GLAccounts GLA
join list_account_with_count_items lawci on GLA.AccountNo = lawci.AccountNo
where lawci.[Number of Line Items] = (
    select max([Number of Line Items])
    from list_account_with_count_items
)
0
Yuri Dukhanin 7 Июл 2021 в 04:37