SQL Server 2012 Express 如何从一列中提取信息并将其与具有表达式限制的另一列进行比较

Posted

技术标签:

【中文标题】SQL Server 2012 Express 如何从一列中提取信息并将其与具有表达式限制的另一列进行比较【英文标题】:SQL Server 2012 Express How do I pull information from one column and compare it to another with an expression restriction 【发布时间】:2014-04-10 20:48:26 【问题描述】:

对不起,我试图正确地用这个词。基本上我正在尝试将表中的一列与表中的另一列进行比较,以检查第二列中有多少行。我使用的是Northwind示例数据库,问题如下。

列出下订单少于 5 个的所有客户(包括 CustomerIdCompany Name)。

包括那些下过 0 个订单的客户。将计数字段命名为“OrderCount”。 按订单数量倒序排列。

我完全坚持这个。

【问题讨论】:

表和它们之间的关系列是什么 虽然 SQL 一开始可能会让人望而生畏,但我还是建议您通过在线 SQL 课程之类的课程逐步学习,而不是在这里寻求解决方案并试图弄清楚。跨度> 既然你被卡住了,为什么不发布一些你尝试过的例子呢? 只想对 J***s 和 deroby 说声谢谢。我只是一个浏览一些示例问题的小人物。我通过剖析示例学到了很多东西,而且我对这个网站还很陌生。 【参考方案1】:

这个名字可能有点不对。

    SELECT c.CustomerId, c.[Company Name], ISNULL(OrderSum.OrderCount,0) AS OrderCount
    FROM Customers c
    LEFT JOIN (SELECT CustomerId, Count(1) OrderCount
               FROM Orders
               GROUP BY CustomerId) OrderSum
    ON c.CustomerId = OrderSum.CustomerId
    WHERE ISNULL(OrderSum.Cnt, 0) < 6
    ORDER BY 2

【讨论】:

您可能想在第三个字段周围添加ISNULL()【参考方案2】:

虽然 J***s 的回答看起来非常好,但我会选择这个

SELECT c.CustomerId, c.[Company Name], COUNT(o.Customer_id) as OrderCount
    FROM Customer c
    LEFT JOIN Orders o
           ON o.CustomerId = c.CustomerId
    GROUP BY c.CustomerId, c.[Company Name]
    HAVING COUNT(o.Customer_id) < 6
    ORDER BY 2

我现在想知道哪个效率更高...如果我有时间我明天会安装 Northwind...

更新:安装了 Northwind 并尝试了 J***s 和我的版本。似乎它们几乎是等价的,尽管在如此小的数据集上得出结论是危险的。

【讨论】:

以上是关于SQL Server 2012 Express 如何从一列中提取信息并将其与具有表达式限制的另一列进行比较的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2012 Express LocalDB

SQL Server 2012 Express LocalDB 的作用

如何从 C# 代码将 SQL Server CE 迁移到 SQL Server 2012 Express

尝试将 SQL Server 2012 Express 还原到 2014

SQL Server 2012 express edition Silent installation

通过 Internet 连接到 SQL Server Express 2012