将记录数据汇总成一个

时间:2012-11-18 08:03:17

标签: sql sql-server

我有这个查询,它在我的每个分支中返回qty。现在,分支有两个WH_subType,如我所附的附图中所示。我想总结2子类型并显示其可用的数量。我该怎么办。enter image description here

我的选择查询就像这样

SELECT
dbo.WarehouseType.name                        AS Section,
dbo.WarehouseSubType.name                     AS WH_Type,
dbo.WarehouseSubType1.name                    AS WH_SubType,
dbo.Branch.name                               AS Branch,
(dbo.WarehouseProductQuantity.actualQuantity - dbo.WarehouseProductQuantity.reservedQuantity) AS AvailQty,
dbo.WarehouseProductQuantity.tafsilId         AS Tafsil,
dbo.Tafsil.description                        AS Product_Name
FROM
dbo.WarehouseSubType
INNER JOIN
dbo.WarehouseType
ON
(
    dbo.WarehouseSubType.warehouseTypeId = dbo.WarehouseType.id)
INNER JOIN
dbo.WarehouseSubType1
ON
(
     dbo.WarehouseSubType.id = dbo.WarehouseSubType1.warehouseSubTypeId)
INNER JOIN
dbo.Warehouse
ON
(
    dbo.WarehouseSubType1.id = dbo.Warehouse.warehouseSubType1Id)
INNER JOIN
dbo.Branch
ON
(
    dbo.Warehouse.branchId = dbo.Branch.id)
INNER JOIN
dbo.WarehouseProductQuantity
ON
(
    dbo.Warehouse.id = dbo.WarehouseProductQuantity.warehouseId)
INNER JOIN
dbo.TafsilLink
ON
(
    dbo.WarehouseProductQuantity.tafsilId = dbo.TafsilLink.sourceId)
INNER JOIN
dbo.Tafsil
ON
(
    dbo.TafsilLink.targetId = dbo.Tafsil.id)
INNER JOIN
dbo.FinishProduct
ON
(
    dbo.Tafsil.id = dbo.FinishProduct.tafsilId)
INNER JOIN
dbo.Supplier
ON
(
    dbo.FinishProduct.supplierId = dbo.Supplier.tafsilId)
WHERE
WarehouseSubType1.warehouseSubTypeId IN (1,4)
group by dbo.WarehouseProductQuantity.tafsilId

2 个答案:

答案 0 :(得分:2)

你有没有尝过一个小组

SELECT SubType, SUM(qty) AS QtySum
GROUP BY SubType

每个按列分组都应该在您的选择中。注意:对于您按其分组的每一列,进一步细分数据

根据OP评论更新: 如果您需要其他列,则需要执行类似

的操作
SELECT s.WH_SubType,s.AvailQty, t.other_cols
from
(SELECT
dbo.WarehouseSubType1.name                    AS WH_SubType,
sum(dbo.WarehouseProductQuantity.actualQuantity -    dbo.WarehouseProductQuantity.reservedQuantity) AS AvailQty
FROM
table
GROUP BY
dbo.WarehouseSubType1.name) s
left join table t on t.dbo.WarehouseSubType1.name = s.WH_SubType;

供参考,请参阅此问题:How do I use "group by" with three columns of data?

更新2:

SELECT
dbo.WarehouseType.name                        AS Section,
dbo.WarehouseSubType.name                     AS WH_Type,
dbo.WarehouseSubType1.name                    AS WH_SubType,
dbo.Branch.name                               AS Branch,
SumTable.AvailQty,
SumTable.Tafsil,
dbo.Tafsil.description                        AS Product_Name
FROM
dbo.WarehouseSubType
INNER JOIN
dbo.WarehouseType
ON
(
    dbo.WarehouseSubType.warehouseTypeId = dbo.WarehouseType.id)
INNER JOIN
dbo.WarehouseSubType1
ON
(
     dbo.WarehouseSubType.id = dbo.WarehouseSubType1.warehouseSubTypeId)
INNER JOIN
dbo.Warehouse
ON
(
    dbo.WarehouseSubType1.id = dbo.Warehouse.warehouseSubType1Id)
INNER JOIN
dbo.Branch
ON
(
    dbo.Warehouse.branchId = dbo.Branch.id)
INNER JOIN
dbo.WarehouseProductQuantity
ON
(
    dbo.Warehouse.id = dbo.WarehouseProductQuantity.warehouseId)
INNER JOIN
dbo.TafsilLink
ON
(
    dbo.WarehouseProductQuantity.tafsilId = dbo.TafsilLink.sourceId)
INNER JOIN
dbo.Tafsil
ON
(
    dbo.TafsilLink.targetId = dbo.Tafsil.id)
INNER JOIN
dbo.FinishProduct
ON
(
    dbo.Tafsil.id = dbo.FinishProduct.tafsilId)
LEFT JOIN (SELECT
sum(dbo.WarehouseProductQuantity.actualQuantity - dbo.WarehouseProductQuantity.reservedQuantity) AS AvailQty,
dbo.WarehouseProductQuantity.tafsilId         AS Tafsil
FROM
dbo.WarehouseProductQuantity
group by dbo.WarehouseProductQuantity.tafsilId) SumTable on dbo.Tafsil.id = SumTable.Tafsil
WHERE
WarehouseSubType1.warehouseSubTypeId IN (1,4)

答案 1 :(得分:0)

您需要执行类似

的操作
SELECT SUM(AvailQty), ... FROM ... WHERE ... GROUP BY WH_SubType

http://www.w3schools.com/sql/sql_func_sum.asp http://www.w3schools.com/sql/sql_groupby.asp