我必须使用SQL server 2008表格,如下所示
表A
ID int Not Null (primary ID)
No int NULL
Value int NULL
Flag nchar(10) NULL
表B
ID int Not Null (primary ID)
No int NULL
Value int NULL
Flag nchar(10) NULL
和我在表A中有以下数据
ID No Value Flag
1 1 12 1
2 1 12 1
3 1 25 1
4 2 120 1
5 3 36 2
6 2 120 2
7 6 1 1
8 2 10 1
9 6 10 2
10 1 25 2
11 2 120 1
表B中没有记录 当我写下面的陈述
SELECT dbo.A.No, SUM(dbo.A.Value) AS [IN], SUM(ISNULL(dbo.B.Value, 0)) AS OUT
FROM dbo.A LEFT OUTER JOIN
dbo.B ON dbo.A.NO = dbo.B.NO
WHERE (dbo.A.Flag = N'1')
GROUP BY dbo.A.No
我的结果低于结果
No IN OUT
1 49 0
2 250 0
6 1 0
当我添加WHERE (dbo.A.Flag = N'1') AND (dbo.B.Flag = N'1')
我的问题是当B不包含记录或未找到B.Id
时,如何将表B中的记录设为0更新: 当我在表B中有数据时,记录即将到来。
答案 0 :(得分:5)
姆兰,
我认为以下sql
会对您有帮助。
SELECT A.No,
SUM(A.Value) AS [IN],
SUM(ISNULL(B.Value, 0)) AS [OUT]
FROM dbo.A A
LEFT JOIN dbo.B B ON A.No = B.No AND B.Flag = N'1'
WHERE A.Flag = N'1'
GROUP BY A.No
答案 1 :(得分:-1)
尝试使用此条件: -
WHERE (dbo.A.Flag = N'1') AND (dbo.B.Flag = ISNULL(N'1',0));
这可能对您有所帮助。