2013-05-20 65 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