2013-05-20 67 views
0

我是T-SQL的新手,我找不到这个查询。T-SQL查询 - 返回一个结果,或者返回0(SQL 2008R2)

我想比较项目的价值和它的分类账价值检查任何异常,因为他们偶尔会失去同步。

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

我宰割一起在查询设计器的查询,对于草率道歉:

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

你需要问一个具体问题。现在,不清楚你的问题是什么,也不知道它的正确答案是什么。 – RBarryYoung

+0

对不起, 我想将([ItemTable]。[Item Value] - [Item Ledger Entry]。[Amount])的值作为'Diff'返回。如果筛选器中没有项目分类帐输入项(IE - 否'打开'输入项),则返回0. 这是否有意义? – user2401849

+0

上面的查询不是已经做到了吗? – RBarryYoung

回答

0

您的表格结构不清楚。我可以猜出你的意思。 是dbo。[Company $ 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