0

当谈到 T-SQL 时,我是个新手,我无法弄清楚这个查询。

我正在尝试将项目的值与其分类帐值进行比较以检查是否有任何异常,因为它们有时会不同步。

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

我在查询设计器中整理了一个查询,为马虎道歉:

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 ) 

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

4

1 回答 1

0

您的表结构不清楚。我能猜到你的意思。dbo.[Company$ItemTable].[Item No_] 在表中是否唯一?dbo.[Company$ItemTable] 是否与 dbo.[Company$Item Ledger Entry] 是一对多的?

如果是的话

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
于 2013-09-24T21:33:35.663 回答