SELECT t1.X,
t1.Item_Code,
t2.X,
t2.Item_Code
FROM (SELECT Sum(e.item_qty) AS X,
A.Item_Code
FROM [Item Master]A
INNER JOIN [Counter Issue Details] e
ON e.Item_Code = A.Item_Code
INNER JOIN [Counter Master] CM
ON CM.Counter_Code = e.Counter_Code
WHERE e.Item_Code = A.Item_Code
AND A.Type_Code = 0
GROUP BY A.Item_Code)t1,
(SELECT Sum(e.item_qty) AS X,
A.Item_Code
FROM [Item Master]A
INNER JOIN [Counter Return Details] e
ON e.Item_Code = A.Item_Code
INNER JOIN [Counter Master] CM
ON CM.Counter_Code = e.Counter_Code
WHERE e.Item_Code = A.Item_Code
AND A.Type_Code = 0
GROUP BY A.Item_Code)t2
Run Code Online (Sandbox Code Playgroud)
我得到了外面的
X Item_Code Y Item_Code
--------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
3998.000 1 2.00 11
2000.000 2 2.00 11
2000.000 3 2.00 11
2504.000 4 2.00 11
2384.000 5 2.00 11
2456.000 6 2.00 11
2372.000 7 2.00 11
4900.000 9 2.00 11
2000.000 10 2.00 11
3948.000 11 2.00 11
Run Code Online (Sandbox Code Playgroud)
现在,我将获得所有10条记录的项目代码11的重复记录为2.我希望Y值映射到项目代码11本身,所有其他值应该为null
你的问题是旧式笛卡尔连接,它充当了CROSS JOIN.如果您考虑正确加入,则不会将数据加倍;
SELECT t1.Item_Code
,t1.X t1_x
,ISNULL(t2.X,0) t2_x
FROM (
SELECT SUM(e.item_qty) AS X
,A.Item_Code
FROM [Item Master] A
INNER JOIN [Counter Issue Details] e ON e.Item_Code = A.Item_Code
INNER JOIN [Counter Master] CM ON CM.Counter_Code = e.Counter_Code
WHERE e.Item_Code = A.Item_Code
AND A.Type_Code = 0
GROUP BY A.Item_Code
) t1
LEFT JOIN
(
SELECT SUM(e.item_qty) AS X
,A.Item_Code
FROM [Item Master] A
INNER JOIN [Counter Return Details] e ON e.Item_Code = A.Item_Code
INNER JOIN [Counter Master] CM ON CM.Counter_Code = e.Counter_Code
WHERE e.Item_Code = A.Item_Code
AND A.Type_Code = 0
GROUP BY A.Item_Code
) t2
ON t1.Item_Code = t2.Item_Code
Run Code Online (Sandbox Code Playgroud)
这将返回t1中的所有值,以及来自t2的匹配信息.编辑:t2.X现在将显示0,没有数据而不是请求的NULL.
关于这个问题,有一些很好的资源;