[英]Count distinct case when SQL
Wondering if I could have a bit of help.想知道我是否可以得到一些帮助。 I'm still new to SQL and I am learning by the day trying to do something a bit more complicated each day.
我对 SQL 还是个新手,我每天都在学习尝试做一些更复杂的事情。
I have a dataset which has duplicated order numbers in it.我有一个数据集,其中包含重复的订单号。 From this I am wanting to do two things: firstly I am looking at doing a count of the number of unique order numbers and then secondly the sum of all the order numbers.
由此我想做两件事:首先,我正在计算唯一订单号的数量,然后是所有订单号的总和。
I have managed to achieve part two of this but I am having a bit of difficulty executing the Count of distinct order numbers.我已经设法实现了其中的第二部分,但是在执行不同订单号的计数时遇到了一些困难。
Please see below my query I know my joins are not correct right now as I will be working on them later.请参阅下面我的查询,我知道我的连接现在不正确,因为我稍后会处理它们。 I am working from an ODBC progress v10 and using Microsoft query manager to extract and then hand writing the code in note pad then transferring back to Excel as currently my company can't get me SSMS.
我正在使用 ODBC 进度 v10,并使用 Microsoft 查询管理器提取并在记事本中手写代码,然后传输回 Excel,因为目前我的公司无法获得 SSMS。
SELECT
Company_0.CoaCompanyName,
SopOrder_0.SooOrderDate,
COUNT(DISTINCT CASE WHEN SopOrder_0.SooOrderNumber = SopOrder_0.SooOrderNumber THEN 1 ELSE 0 END) AS 'Orders',
SUM(CASE WHEN SopOrder_0.SooOrderNumber IS NOT NULL THEN 1 ELSE 0 END) AS 'Order Items',
SopOrderItem_0.SoiValue,
SopOrder_0.SooParentOrderReference
FROM
SBS.PUB.Company Company_0,
SBS.PUB.SopOrder SopOrder_0,
SBS.PUB.SopOrderItem SopOrderItem_0
WHERE
SopOrder_0.SopOrderID = SopOrderItem_0.SopOrderID
AND Company_0.CompanyID = SopOrder_0.CompanyID
AND SopOrder_0.SooOrderDate > '2019-01-01'
Current data looks like当前数据看起来像
Company Name Order Numbers
-------------------------------------
CompanyA Orderno1
CompanyA Orderno1
CompanyB Orderno2
CompanyB Orderno3
CompanyB Orderno3
CompanyB Orderno3
How I want it to look:我希望它看起来如何:
Company Name Orders Order Items
-------------------------------------------------
CompanyA 1 2
CompanyB 2 4
You could use count (distinct..)
, count(*)
and group by
您可以使用
count (distinct..)
、 count(*)
和group by
SELECT
Company_0.CoaCompanyName
, Count(DISTINCT SopOrder_0.SooOrderNumber ) AS Orders
, count(*) AS `Order Item`
FROM SBS.PUB.Company Company_0
INNER JOIN SBS.PUB.SopOrder SopOrder_0 ON Company_0.CompanyID = SopOrder_0.CompanyID
INNER JOIN SBS.PUB.SopOrderItem SopOrderItem_0 ON SopOrder_0.SopOrderID = SopOrderItem_0.SopOrderID
WHERE SopOrder_0.SooOrderDate > '2019-01-01'
GROUP BY Company_0.CoaCompanyName
For readability, you should use explicit join
syntax and avoid old implicit join
syntax based on where
condition.为了可读性,您应该使用显式
join
语法并避免基于where
条件的旧式隐式join
语法。
For composite column name, you could use back-ticks (" `
").对于复合列名称,您可以使用反引号(“
`
”)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.