对于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 )
这有意义吗?有人可以帮忙吗?谢谢!
答案 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