插入#temp之前的SQL Sum列
在我的存储过程中,名为#temp1的表包含以下列:插入#temp之前的SQL Sum列,sql,sum,group-by,Sql,Sum,Group By,在我的存储过程中,名为#temp1的表包含以下列: #temp1 (StoreId, StoreDesc, ReservedQty, AvgPrice, QtyOnHand) 我的问题基于以下查询 INSERT INTO #temp2 (StoreId, StoreDesc, CommittedQty) (SELECT StoreId, StoreDesc, CASE WHEN ReservedQty > QtyOnHand THEN sum(QtyO
#temp1 (StoreId, StoreDesc, ReservedQty, AvgPrice, QtyOnHand)
我的问题基于以下查询
INSERT INTO #temp2 (StoreId, StoreDesc, CommittedQty)
(SELECT StoreId, StoreDesc,
CASE WHEN ReservedQty > QtyOnHand THEN
sum(QtyOnHand * AvgPrice)
ELSE
sum(ReservedQty * AvgPrice)
END AS CommittedQty
FROM #temp1
GROUP BY StoreId, StoreDesc, QtyOnHand, ReservedQty)
示例结果集如下所示:
StoreId StoreDesc CommittedQty
C4ED0D8B-22CF-40FE-8EF9-7FD764310C94 FramersBranch 0
C4ED0D8B-22CF-40FE-8EF9-7FD764310C94 FarmersBranch 88978
C4ED0D8B-22CF-40FE-8EF9-7FD764310C94 FarmersBranch 0
C4ED0D8B-22CF-40FE-8EF9-7FD764310C94 FarmersBranch 3152
6369D3A6-83BC-4BB0-9A25-86838CD2B7BA Woodlands 5582
6369D3A6-83BC-4BB0-9A25-86838CD2B7BA Woodlands 389
不幸的是,由于我必须在我的CASE
语句中按QtyOnHand
和ReservedQty
列对进行分组,因此每个StoreId都有多行
我想知道是否有一种简单的方法可以让我(再次)根据CommittedQty对结果进行汇总,这样我就可以得到我想要的以下结果集:
StoreId v StoreDesc CommittedQty
C4ED0D8B-22CF-40FE-8EF9-7FD764310C94 FramersBranch 92130
6369D3A6-83BC-4BB0-9A25-86838CD2B7BA Woodlands 5971
我意识到我可以使用另一个临时表,但想知道在SELECT
语句中是否有更简单的方法来实现这一点我不会使用临时表。我猜您已经使用了至少一个过多:)
SELECT StoreId, StoreDesc,
SUM(
CASE
WHEN ReservedQty > QtyOnHand THEN
QtyOnHand * AvgPrice
ELSE
ReservedQty * AvgPrice
END
) AS CommittedQty
FROM #temp1
GROUP BY
StoreId, StoreDesc
INSERT INTO #temp2 (StoreId, StoreDesc, CommittedQty)
SELECT StoreId, StoreDesc, Sum (CommittedQty)
FROM
(SELECT StoreId, StoreDesc,
CASE WHEN ReservedQty > QtyOnHand THEN
sum(QtyOnHand * AvgPrice)
ELSE
sum(ReservedQty * AvgPrice)
END AS CommittedQty
FROM #temp1
GROUP BY StoreId, StoreDesc, QtyOnHand, ReservedQty)
)
GROUP BY StoreId, StoreDesc
您需要在整个案例陈述中列出金额:
SUM(AvgPrice *
CASE
WHEN ReservedQty > QtyOnHand THEN QtyOnHand
ELSE ReservedQty
END)
我不会用临时桌。我猜您已经使用了至少一个过多:)
您需要在整个案例陈述中列出金额:
SUM(AvgPrice *
CASE
WHEN ReservedQty > QtyOnHand THEN QtyOnHand
ELSE ReservedQty
END)
第一件事:如果你能避免使用#temp和#temp表,你应该这样做。它们是导致全球变暖和山洪暴发的邪恶的、令人讨厌的小东西,是各种温室气体排放的罪魁祸首。(:
除此之外,除非是绝对必要的,否则请去掉临时表,并在必要时将其替换为子查询
您可以简单地将另一个select环绕在该语句周围
INSERT INTO #temp2 (StoreId, StoreDesc, CommittedQty)
SELECT StoreId, StoreDesc, Sum (CommittedQty)
FROM
(SELECT StoreId, StoreDesc,
CASE WHEN ReservedQty > QtyOnHand THEN
sum(QtyOnHand * AvgPrice)
ELSE
sum(ReservedQty * AvgPrice)
END AS CommittedQty
FROM #temp1
GROUP BY StoreId, StoreDesc, QtyOnHand, ReservedQty)
)
GROUP BY StoreId, StoreDesc
第一件事:如果你能避免使用#temp和##temp表,你应该这样做。它们是导致全球变暖和山洪暴发的邪恶、肮脏的小东西,是造成各种温室气体排放的罪魁祸首。(:
除此之外,除非是绝对必要的,否则请去掉临时表,并在必要时将其替换为子查询
您可以简单地将另一个select环绕在该语句周围
INSERT INTO #temp2 (StoreId, StoreDesc, CommittedQty)
SELECT StoreId, StoreDesc, Sum (CommittedQty)
FROM
(SELECT StoreId, StoreDesc,
CASE WHEN ReservedQty > QtyOnHand THEN
sum(QtyOnHand * AvgPrice)
ELSE
sum(ReservedQty * AvgPrice)
END AS CommittedQty
FROM #temp1
GROUP BY StoreId, StoreDesc, QtyOnHand, ReservedQty)
)
GROUP BY StoreId, StoreDesc
在另一个论坛上发布了该问题,并在两个论坛上收到了相同的答案。谢谢Guy在另一个论坛上发布了该问题,并在两个论坛上收到了相同的答案。谢谢各位