无法正确获取sql查询中的计数
我有这样一个问题:无法正确获取sql查询中的计数,sql,sql-server,Sql,Sql Server,我有这样一个问题: SELECT T_BOE_Stock_Detail.itemCode, T_Master_Item.itemName as Description, T_Master_Item.categoryCode as Category, sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) As Qty, SUM(CASE WHEN DOCTYPE = 'GOOD' THEN 1 ELSE 0 END ) Goo
SELECT T_BOE_Stock_Detail.itemCode, T_Master_Item.itemName as Description,
T_Master_Item.categoryCode as Category,
sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) As Qty,
SUM(CASE WHEN DOCTYPE = 'GOOD' THEN 1 ELSE 0 END ) Good,
SUM(CASE WHEN DOCTYPE = 'DEFECTIVE' THEN 1 ELSE 0 END) Defective
FROM T_BOE_Stock_Detail
LEFT OUTER JOIN T_Master_Item ON T_BOE_Stock_Detail.itemCode = T_Master_Item.itemCode
WHERE T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty > 0
group by T_BOE_Stock_Detail.itemCode, T_Master_Item.itemName,T_Master_Item.categoryCode
having sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) > 0
order by T_Master_Item.categoryCode, T_BOE_Stock_Detail.itemCode
Itemcode description category qty good defective
661-00060 Logic Board 4 2 1
select itemCode,qty,ReservedQty,DOCTYPE from T_BOE_Stock_Detail where itemCode='661-00060' and qty-ReservedQty >0
Itemcode description category qty good defective
661-00060 Logic Board 4 3 1
我的想法是这样的:
SELECT T_BOE_Stock_Detail.itemCode, T_Master_Item.itemName as Description,
T_Master_Item.categoryCode as Category,
sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) As Qty,
SUM(CASE WHEN DOCTYPE = 'GOOD' THEN 1 ELSE 0 END ) Good,
SUM(CASE WHEN DOCTYPE = 'DEFECTIVE' THEN 1 ELSE 0 END) Defective
FROM T_BOE_Stock_Detail
LEFT OUTER JOIN T_Master_Item ON T_BOE_Stock_Detail.itemCode = T_Master_Item.itemCode
WHERE T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty > 0
group by T_BOE_Stock_Detail.itemCode, T_Master_Item.itemName,T_Master_Item.categoryCode
having sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) > 0
order by T_Master_Item.categoryCode, T_BOE_Stock_Detail.itemCode
Itemcode description category qty good defective
661-00060 Logic Board 4 2 1
select itemCode,qty,ReservedQty,DOCTYPE from T_BOE_Stock_Detail where itemCode='661-00060' and qty-ReservedQty >0
Itemcode description category qty good defective
661-00060 Logic Board 4 3 1
但是如果我写一个单独的查询,像这样:
SELECT T_BOE_Stock_Detail.itemCode, T_Master_Item.itemName as Description,
T_Master_Item.categoryCode as Category,
sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) As Qty,
SUM(CASE WHEN DOCTYPE = 'GOOD' THEN 1 ELSE 0 END ) Good,
SUM(CASE WHEN DOCTYPE = 'DEFECTIVE' THEN 1 ELSE 0 END) Defective
FROM T_BOE_Stock_Detail
LEFT OUTER JOIN T_Master_Item ON T_BOE_Stock_Detail.itemCode = T_Master_Item.itemCode
WHERE T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty > 0
group by T_BOE_Stock_Detail.itemCode, T_Master_Item.itemName,T_Master_Item.categoryCode
having sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) > 0
order by T_Master_Item.categoryCode, T_BOE_Stock_Detail.itemCode
Itemcode description category qty good defective
661-00060 Logic Board 4 2 1
select itemCode,qty,ReservedQty,DOCTYPE from T_BOE_Stock_Detail where itemCode='661-00060' and qty-ReservedQty >0
Itemcode description category qty good defective
661-00060 Logic Board 4 3 1
我的想法是这样的:
SELECT T_BOE_Stock_Detail.itemCode, T_Master_Item.itemName as Description,
T_Master_Item.categoryCode as Category,
sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) As Qty,
SUM(CASE WHEN DOCTYPE = 'GOOD' THEN 1 ELSE 0 END ) Good,
SUM(CASE WHEN DOCTYPE = 'DEFECTIVE' THEN 1 ELSE 0 END) Defective
FROM T_BOE_Stock_Detail
LEFT OUTER JOIN T_Master_Item ON T_BOE_Stock_Detail.itemCode = T_Master_Item.itemCode
WHERE T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty > 0
group by T_BOE_Stock_Detail.itemCode, T_Master_Item.itemName,T_Master_Item.categoryCode
having sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) > 0
order by T_Master_Item.categoryCode, T_BOE_Stock_Detail.itemCode
Itemcode description category qty good defective
661-00060 Logic Board 4 2 1
select itemCode,qty,ReservedQty,DOCTYPE from T_BOE_Stock_Detail where itemCode='661-00060' and qty-ReservedQty >0
Itemcode description category qty good defective
661-00060 Logic Board 4 3 1
我的预期输出如下:
SELECT T_BOE_Stock_Detail.itemCode, T_Master_Item.itemName as Description,
T_Master_Item.categoryCode as Category,
sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) As Qty,
SUM(CASE WHEN DOCTYPE = 'GOOD' THEN 1 ELSE 0 END ) Good,
SUM(CASE WHEN DOCTYPE = 'DEFECTIVE' THEN 1 ELSE 0 END) Defective
FROM T_BOE_Stock_Detail
LEFT OUTER JOIN T_Master_Item ON T_BOE_Stock_Detail.itemCode = T_Master_Item.itemCode
WHERE T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty > 0
group by T_BOE_Stock_Detail.itemCode, T_Master_Item.itemName,T_Master_Item.categoryCode
having sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) > 0
order by T_Master_Item.categoryCode, T_BOE_Stock_Detail.itemCode
Itemcode description category qty good defective
661-00060 Logic Board 4 2 1
select itemCode,qty,ReservedQty,DOCTYPE from T_BOE_Stock_Detail where itemCode='661-00060' and qty-ReservedQty >0
Itemcode description category qty good defective
661-00060 Logic Board 4 3 1
我想取好的数量和坏的数量之和?那么如何重新编写查询。您在顶部查询中的行:
SUM(CASE WHEN DOCTYPE = 'GOOD' THEN 1 ELSE 0 END ) Good,
SUM(CASE WHEN DOCTYPE = 'DEFECTIVE' THEN 1 ELSE 0 END) Defective
它是对DOCTYPE='GOOD'
或DOCTYPE='DEFECTIVE'
的行数求和
您需要DOCTYPE='GOOD'
和DOCTYPE='DEFECTIVE'
的quaty
数量。此外,根据您的“总计”数量行,您可能希望减去任何预留数量
尝试将这些行替换为:
SUM(CASE WHEN DOCTYPE = 'GOOD' THEN qty - ReservedQty ELSE 0 END ) Good,
SUM(CASE WHEN DOCTYPE = 'DEFECTIVE' THEN qty - ReservedQty ELSE 0 END) Defective
您在顶部查询中的行:
SUM(CASE WHEN DOCTYPE = 'GOOD' THEN 1 ELSE 0 END ) Good,
SUM(CASE WHEN DOCTYPE = 'DEFECTIVE' THEN 1 ELSE 0 END) Defective
它是对DOCTYPE='GOOD'
或DOCTYPE='DEFECTIVE'
的行数求和
您需要DOCTYPE='GOOD'
和DOCTYPE='DEFECTIVE'
的quaty
数量。此外,根据您的“总计”数量行,您可能希望减去任何预留数量
尝试将这些行替换为:
SUM(CASE WHEN DOCTYPE = 'GOOD' THEN qty - ReservedQty ELSE 0 END ) Good,
SUM(CASE WHEN DOCTYPE = 'DEFECTIVE' THEN qty - ReservedQty ELSE 0 END) Defective
不添加1,而是添加tbsd.QTY-tbsd.RESERVEDQTY
:
SELECT
tbsd.ITEMCODE,
tmi.ITEMNAME AS DESCRIPTION,
tmi.CATEGORYCODE AS CATEGORY,
SUM(tbsd.QTY - tbsd.RESERVEDQTY) AS QTY,
SUM(CASE WHEN DOCTYPE = 'GOOD' THEN tbsd.QTY - tbsd.RESERVEDQTY ELSE 0 END) AS GOOD,
SUM(CASE WHEN DOCTYPE = 'DEFECTIVE' THEN tbsd.QTY - tbsd.RESERVEDQTY ELSE 0 END) AS DEFECTIVE
FROM T_BOE_STOCK_DETAIL tbsd
LEFT OUTER JOIN T_MASTER_ITEM
ON tbsd.ITEMCODE = tmi.ITEMCODE
WHERE
tbsd.QTY - tbsd.RESERVEDQTY > 0
GROUP BY
tbsd.ITEMCODE,
tmi.ITEMNAME,
tmi.CATEGORYCODE
HAVING SUM(tbsd.qty - tbsd.ReservedQty) > 0
ORDER BY
tmi.categoryCode,
tbsd.itemCode
作为旁注,请为表格添加别名以增加可读性。添加tbsd.QTY-tbsd.RESERVEDQTY
,而不是添加1:
SELECT
tbsd.ITEMCODE,
tmi.ITEMNAME AS DESCRIPTION,
tmi.CATEGORYCODE AS CATEGORY,
SUM(tbsd.QTY - tbsd.RESERVEDQTY) AS QTY,
SUM(CASE WHEN DOCTYPE = 'GOOD' THEN tbsd.QTY - tbsd.RESERVEDQTY ELSE 0 END) AS GOOD,
SUM(CASE WHEN DOCTYPE = 'DEFECTIVE' THEN tbsd.QTY - tbsd.RESERVEDQTY ELSE 0 END) AS DEFECTIVE
FROM T_BOE_STOCK_DETAIL tbsd
LEFT OUTER JOIN T_MASTER_ITEM
ON tbsd.ITEMCODE = tmi.ITEMCODE
WHERE
tbsd.QTY - tbsd.RESERVEDQTY > 0
GROUP BY
tbsd.ITEMCODE,
tmi.ITEMNAME,
tmi.CATEGORYCODE
HAVING SUM(tbsd.qty - tbsd.ReservedQty) > 0
ORDER BY
tmi.categoryCode,
tbsd.itemCode
作为旁注,请为您的表格加上别名以增加可读性。亲爱的先生,我们必须添加保留数量,而不是数量。我刚刚修改了答案。:-)尊敬的先生,我们必须添加保留数量,而不是数量。我刚刚修改了答案。:-)谢谢。这对我来说很有用我会非常感谢你的谢谢。这对我来说很有用1.我将非常感谢你