Подсчитать количество элементов в таблице SQL Server - PullRequest
1 голос
/ 01 мая 2011

У меня есть 2 таблицы, которые выглядят так:

ТАБЛИЦА СТАТЕЙ:

, и результат должен выглядеть следующим образом:

enter image description here

Как мне это сделать, используя как SQL-запрос (я использую SQL Server 2005), так и использование LINQ to SQL-запрос?

BTW яИспользование SQL Server 2005, Asp.net с C # в Visual Studio 2008.

Пожалуйста, помогите мне

Спасибо в ожидании

Ответы [ 3 ]

2 голосов
/ 01 мая 2011
select 
  A.SNo,
  A.Article_Name,
  count(C.Article_Name) as Total_Items_Bought
from Articles as A
  left outer join CustomersRecord as C
    on A.Article_Name = C.Article_Name
group by A.SNo, A.Article_Name    
order by A.SNo
2 голосов
/ 01 мая 2011

Обновление: Добавлен эксперимент Linq, который можно использовать, если вам требуется соединение OUTER.

ВНУТРЕННЕЕ СОЕДИНЕНИЕ

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

LINQ 2 SQL

from a in Articles
join c in CustomersRecords on 
     a.Article_Name equals c.Article_Name 
group a by new {a.SNo, a.Article_Name} into g
select new 
       {
         SNo = g.Key.SNo, 
         Article_Name = g.Key.Article_Name, 
         Total_Items_Bought = g.Count()
       }

Выше приведено следующее SQL

SELECT COUNT(*) AS [Total_Items_Bought], [t0].[SNo], [t0].[Article_Name]
FROM [Articles] AS [t0]
INNER JOIN [CustomersRecord] AS [t1] ON [t0].[Article_Name] = [t1].[Article_Name]
GROUP BY [t0].[SNo], [t0].[Article_Name]

Что при небольшом очищении дает вам

SELECT a.SNo, 
       a.Article_Name, 
       COUNT(*) AS Total_Items_Bought
  FROM Articles AS a
 INNER JOIN CustomersRecord AS c ON a.Article_Name = c.Article_Name
 GROUP BY a.SNo, a.Article_Name

ЛЕВОЕ НАРУЖНОЕ СОЕДИНЕНИЕ

Для левого внешнего соединения, т.е.вернуть все статьи, если они еще не были куплены, вы можете использовать следующее.

LINQ 2 SQL

from a in Articles
join c in CustomersRecords on 
     a.Article_Name equals c.Article_Name into apc
select new 
       {
         SNo = a.SNo, 
         Article_Name = a.Article_Name, 
         Total_Items_Bought = apc.Count()
       }

Это переводит в следующий SQL

 SELECT [t0].[SNo], [t0].[Article_Name], (
    SELECT COUNT(*)
    FROM [CustomersRecord] AS [t1]
    WHERE [t0].[Article_Name] = [t1].[Article_Name]
    ) AS [Total_Items_Bought]
 FROM [Articles] AS [t0]
1 голос
/ 01 мая 2011

Используйте это для SQL

SELECT 
   SNO,Article_Name, 
   (SELECT COUNT(*) FROM CustomersRecord AS cr 
    WHERE cr.Article_Name = Article_Name) AS Total_Items_Bought 
FROM ARTICLES
...