несколько агрегатных функций с несколькими таблицами в SQL Server - PullRequest
0 голосов
/ 12 апреля 2011

Я пытаюсь получить данные для введенного лица, я хочу вытащить данные как количество счетов и количество позиций для конкретного человека.

Выход

Entered_by  No of line items
CD               9
CD               136084
deepa             7
deepa             18
dolly             757
dolly             22350
kroshni         666
kroshni         16161
lokesh           4
lokesh           999
MHeera           639
MHeera             20427
nandini            7
nandini            5318

Здесь данные в поле Количество позиций смешивают как количество «Количество позиций», так и «Количество счетов», я хочу показать как

Entered_by  No of line items    No of invoices
CD               136084              9
deepa               18                7
dolly               22350               757

Пожалуйста, помогите мне с этим кем-то ... .. 

Вот запрос T-SQL

select ENTERED_BY, count(entered_by) 'NO OF LINE ITEMS'
from im_invoice, im_invoice_line_item, im_invoice_inventory 
where invoice_rid = invoice_fk
and invoice_inventory_rid = invoice_inv_fk
and enter_date between dateadd(mm, -3, getdate()) and dateadd(mm,0,getdate())
group by entered_by

union 

select entered_by, count(invoice_num) 'NO OF INVOICES' from im_invoice
where enter_date between dateadd(mm, -3, getdate()) and dateadd(mm,0,getdate())
group by entered_by

1 Ответ

1 голос
/ 12 апреля 2011

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

  1. Избавьтесь отunion
  2. Превратите 2 запроса в производные таблицы
  3. Выберите из них объединение по записанному количеству *

Например.

SELECT LineItems.ENTERED_BY, [NO OF LINE ITEMS], [NO OF INVOICES] 
FROM
(SELECT ENTERED_BY,COUNT(entered_by) 'NO OF LINE ITEMS' 
FROM im_invoice, im_invoice_line_item,im_invoice_inventory   
WHERE invoice_rid = invoice_fk  
AND invoice_inventory_rid = invoice_inv_fk
AND enter_date BETWEEN dateadd(mm, -3, getdate()) AND dateadd(mm,0,getdate())
GROUP BY entered_by) AS LineItems 
INNER JOIN 
(SELECT entered_by, count(invoice_num) 'NO OF INVOICES' 
FROM im_invoice  
WHERE enter_date BETWEEN dateadd(mm, -3, getdate()) AND dateadd(mm,0,getdate())  
GROUP BY entered_by ) AS invoices 
ON invoices.entered_by = LineItems.ENTERED_BY
...