无法正确获取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.我将非常感谢你