SQL时计算不同的大小写

问题描述 投票:1回答:1

想知道我是否能得到一点帮助。我还是SQL新手,我正在学习每天尝试做一些比较复杂的事情。

我有一个数据集,其中包含重复的订单号。由此我想做两件事:首先,我正在考虑计算唯一订单号的数量,然后是所有订单号的总和。

我已经设法实现了第二部分,但是我在执行不同订单号的计数时遇到了一些困难。

请参阅下面我的查询我知道我的联接现在不正确,因为我将在以后处理它们。我正在从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'

目前的数据看起来像

Company Name           Order Numbers    
-------------------------------------
CompanyA                 Orderno1
CompanyA                 Orderno1
CompanyB                 Orderno2
CompanyB                 Orderno3
CompanyB                 Orderno3
CompanyB                 Orderno3

我希望它看起来如何:

Company Name           Orders         Order Items
-------------------------------------------------
CompanyA                 1                2
CompanyB                 2                4
sql excel odbc case-when
1个回答
1
投票

你可以使用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 

为了便于阅读,您应该使用显式的join语法,并避免基于join条件的旧隐式where语法。

对于复合列名称,您可以使用反向标记(“`”)。

© www.soinside.com 2019 - 2024. All rights reserved.