T-SQL查询 - 返回一个结果,或返回0(SQL 2008R2)

时间:2013-05-20 13:32:42

标签: sql tsql view sql-server-2008-r2

对于T-SQL,我是新手,我无法弄清楚这个查询。

我正在尝试将Item的值与其分类帐Value进行比较以检查是否存在任何异常,因为它们偶尔会失去同步。

我需要查询,对于所有当前库存,从项目的“项目值”字段中减去项目分类帐的“金额”字段。有几个项目分类帐条目,它必须从分类帐条目中减去打开的金额。如果没有Open Ledger Entry,则减去零。

我在查询设计器中一起查询了一个问题,对于邋iness道歉:

SELECT dbo.[Company$ItemTable].[Item No_],
       dbo.[Company$ItemTable].[Current Stock],
       dbo.[Company$ItemTable].[Item Value],
       dbo.[Company$Item Ledger Entry].[Open],
       dbo.[Company$ItemTable].[Item Value] - SUM(CASE
                                                    WHEN dbo.[Company$Item Ledger Entry].[Open] = 1 THEN dbo.[Company$Item Ledger Entry].Amount
                                                    ELSE 0
                                                  END) AS Diff,
       SUM(CASE
             WHEN dbo.[Company$Item Ledger Entry].[Open] = 1 THEN dbo.[Company$Item Ledger Entry].Amount
             ELSE 0
           END)                                        AS AmountILE,
       dbo.[Company$Item Ledger Entry].[Entry No_]
FROM   dbo.[Company$ItemTable]
       LEFT OUTER JOIN dbo.[Company$Item Ledger Entry]
         ON dbo.[Company$ItemTable].[Item No_] = dbo.[Company$Item Ledger Entry].[Lot No_]
GROUP  BY dbo.[Company$ItemTable].[Item No_],
          dbo.[Company$ItemTable].[Current Stock],
          dbo.[Company$ItemTable].[Item Value],
          dbo.[Company$Item Ledger Entry].[Open],
          dbo.[Company$Item Ledger Entry].[Entry No_]
HAVING ( dbo.[Company$ItemTable].[Current Stock] = 1 )
       AND ( dbo.[Company$ItemTable].[Item Value] - SUM(CASE
                                                          WHEN dbo.[Company$Item Ledger Entry].[Open] = 1 THEN dbo.[Company$Item Ledger Entry].Amount
                                                          ELSE 0
                                                        END) > 1 )
       AND ( dbo.[Company$Item Ledger Entry].[Open] = 1 ) 

这有意义吗?有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您的表结构不清楚。我猜你的意思。 是dbo。[公司$ ItemTable]。[Item No_]在表中是唯一的吗? 是dbo。[公司$ ItemTable]与dbo。[公司$项目分类帐分录]是一对多的?

如果是,那么

SELECT 
   items.[Item No_],
   items.[Current Stock],
   items.[Item Value],
   items.[Item Value] - ISNULL( le.OpenAmount, 0) AS Diff,
   ISNULL( le.OpenAmount, 0) AS AmountILE
FROM   dbo.[Company$ItemTable] items
OUTER APPPLY
(
    SELECT SUM(e.Amount)
    FROM dbo.[Company$Item Ledger Entry] e
    WHERE items.[Item No_] = e.[Lot No_]
    AND e.[Open] = 1
) le(OpenAmount)
WHERE items.[Current Stock] = 1