COIST与DISTINCT

时间:2013-12-23 19:46:50

标签: sql sql-server

我在MyTable中存储客户的所有送货信息 - CustomerId,ShippingID,ItemID,ShipDate。货件/ shippingID可以包含一个或多个Items / ItemID。运输ID只能有一个发货日期。以下是表格的示例 -

CustomerID, ShippingID, ItemID, ShipDate
C1, A1, I200, today
C1, A1, I88, today
C1, A2, I7, tomorrow
C1, B1, I955, yesterday
C2, B2.....et cetra

对于customerID,我想显示不同的shippingID,shippingID,ShipDate中的项目数。

预期产出 -

C1, A1, 2, today
C1, A2, 1, tomorrow
C1, B1, 1, yesterday
...etc

我试过了 -

select distinct shippingid, 
count(*) over() itemid, 
orderdate
from mytable
where customerID = 'C1'

输出 -

C1, A1, 4, today
C1, A2, 4, tomorrow

问题是它计算了C1的所有项目。我想只计算客户的shippingID中的项目。我该怎么做?

编辑 - 目前,我并不需要为所有客户提供此服务。只为一个。因此没有必要分组。

感谢。

3 个答案:

答案 0 :(得分:2)

SELECT  shippingid,
        COUNT(*) Items,
        ShipDate 
FROM mytable
WHERE customerID = 'C1'
GROUP BY shippingid,
         ShipDate 

答案 1 :(得分:1)

为什么不使用Group By?这是最简单的方式...... SqlFiddle

SELECT
    CustomerID,
    ShippingID,
    count(1)
FROM mytable
GROUP BY CustomerID, ShippingID

答案 2 :(得分:0)

也许这个:

select customerID, shippingid, itemid, count(1)
from mytable
group by customerId, shippingid, itemid