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 个的所有客户(包括 CustomerId
和 Company Name
)。
我完全坚持这个。
【问题讨论】:
表和它们之间的关系列是什么 虽然 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