我在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
不适合我。
预期结果
答案 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