【问题标题】:Count the number of elements in sql server table统计sql server表中的元素个数
【发布时间】:2011-05-01 09:31:44
【问题描述】:

我有 2 个表格,如下所示:

文章表:

输出应该是这样的:

如何同时使用 sql 查询(我正在使用 sql server 2005)和使用 linq to sql 查询来完成此操作?

顺便说一句,我在 Visual Studio 2008 中使用 sql server 2005、asp.net 和 c#。

请帮帮我

感谢期待

【问题讨论】:

    标签: asp.net sql-server sql-server-2005 linq-to-sql


    【解决方案1】:

    更新:添加了可以在需要 OUTER 连接时使用的 Linq 表达式。


    内连接

    对于内部连接,即。只取回至少购买过一次的物品,可以使用以下。

    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]
    

    【讨论】:

      【解决方案2】:
      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
      

      【讨论】:

        【解决方案3】:

        在 SQL 中使用它

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-15
          • 1970-01-01
          • 1970-01-01
          • 2023-02-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多