选择没有分组依据的计数

时间:2014-04-14 03:43:06

标签: sql-server

我在SQL Server 2005中有以下表格。一个订单可以有多个容器。容器可以是塑料或木材(未来可能会出现新类型)。

我需要列出以下列 -

OrderID, ContainerType, ContainerCOUNT and ContainerID.

由于我还需要列出ContainerID,因此以下分组方法将无效。

DECLARE @OrderCoarntainers TABLE (OrderID INT, ContainerID INT, ContainerType VARCHAR(10))
INSERT INTO @OrderCoarntainers VALUES (1,101,'Plastic')
INSERT INTO @OrderCoarntainers VALUES (1,102,'Wood')
INSERT INTO @OrderCoarntainers VALUES (1,103,'Wood')
INSERT INTO @OrderCoarntainers VALUES (2,104,'Plastic')

SELECT OrderID,ContainerType,COUNT(DISTINCT ContainerID) AS ContainerCOUNT
FROM @OrderCoarntainers
GROUP BY OrderID,ContainerType

实现这个目标的最佳途径是什么?

注意:升级SQL Server version不适合我。

预期结果

enter image description here

2 个答案:

答案 0 :(得分:3)

您应该可以使用windowed function

SELECT  OrderID,
        ContainerType,
        COUNT(ContainerID) OVER (PARTITION BY OrderID, ContainerType) AS ContainerCOUNT,
        ContainerID
FROM    @OrderCoarntainers

答案 1 :(得分:1)

我真的不太了解SQL的SQL Server方言,但是我可以建议一些非常基本的东西并且可以工作。它依赖于连接,这对于性能不是最佳的,但如果表不是很大或性能不重要,它将完成工作。真正的问题是表格设计对于您管理的数据非常糟糕,因为这不应该都在一个表中。但无论如何:

SELECT o1.OrderID, o1.ContainerType, count(o2.ContainerID) AS ContainerCOUNT, o1.ContainerID FROM @OrderCoarntainers o1 JOIN @OrderCoarntainers o2 ON o1.OrderID = o2.orderID AND o1.ContainerType = o2.ContainerType GROUP BY o1.OrderID