如何解决如何在 UNION ALL 中设置 UNION?
我正在尝试执行此代码:
SELECT ItName,ItCode,Qty,Qt2,Qt3
FROM
(
SELECT A.ItName,A.ItCode,COUNT(B.Qty) AS 'Quantity 1',COUNT(B.Qty2) AS 'Quantity 2',COUNT(B.Qty3) AS 'Quantity 3'
FROM tblitem A
INNER JOIN tblstocksummary B ON A.ItCode = B.ItCode
WHERE A.Itcode='IL001-000151'
GROUP BY A.ItCode
HAVING COUNT(B.Qty) !='0'AND COUNT(B.Qty2) !='0' AND COUNT(B.Qty3) !='0'
UNION
SELECT A2.ItName,A2.ItCode,COUNT(B2.Qty),COUNT(B2.Qty2),COUNT(B2.Qty3) FROM tblitem A2
INNER JOIN tblstocksummary B2 ON A2.ItCode = B2.ItCode
WHERE A2.Itcode='IL001-000373'
GROUP BY A2.ItCode
HAVING COUNT(B2.Qty) !='0'AND COUNT(B2.Qty2) !='0' AND COUNT(B2.Qty3) !='0'
) t
UNION ALL
SELECT A3.ItName,A3.ItCode,COUNT(B3.Qty),COUNT(B3.Qty2),COUNT(B3.Qty3) FROM tblitem A3
INNER JOIN tblstocksummary B3 ON A2.ItCode = B3.ItCode
WHERE A3.Itcode='IL001-000166'
GROUP BY A3.ItCode
HAVING COUNT(B3.Qty) !='0'AND COUNT(B3.Qty2) !='0' AND COUNT(B3.Qty3) !='0';
但是我遇到了错误:
SQL 错误 (1054):字段列表中的未知列 'Qty'
所以,我想要么我使用了错误的语法,要么我正在尝试做一些无法完成的事情。也许最有可能有经验的人会立即看出问题所在。
有人可以帮我吗?谢谢
解决方法
因为您有 Quantity1
Quantity2
作为列而不是数量
也许试试这个
SELECT ItName,ItCode,Qty,Qt2,Qt3
FROM
(
SELECT A.ItName,A.ItCode,COUNT(B.Qty) AS 'Qty',COUNT(B.Qty2) AS 'Qty2',COUNT(B.Qty3) AS 'Qty3'
FROM tblitem A
INNER JOIN tblstocksummary B ON A.ItCode = B.ItCode
WHERE A.Itcode='IL001-000151'
GROUP BY A.ItCode
HAVING COUNT(B.Qty) !='0'AND COUNT(B.Qty2) !='0' AND COUNT(B.Qty3) !='0'
UNION
SELECT A2.ItName,A2.ItCode,COUNT(B2.Qty),COUNT(B2.Qty2),COUNT(B2.Qty3) FROM tblitem A2
INNER JOIN tblstocksummary B2 ON A2.ItCode = B2.ItCode
WHERE A2.Itcode='IL001-000373'
GROUP BY A2.ItCode
HAVING COUNT(B2.Qty) !='0'AND COUNT(B2.Qty2) !='0' AND COUNT(B2.Qty3) !='0'
) t
UNION ALL
SELECT A3.ItName,A3.ItCode,COUNT(B3.Qty),COUNT(B3.Qty2),COUNT(B3.Qty3) FROM tblitem A3
INNER JOIN tblstocksummary B3 ON A2.ItCode = B3.ItCode
WHERE A3.Itcode='IL001-000166'
GROUP BY A3.ItCode
HAVING COUNT(B3.Qty) !='0'AND COUNT(B3.Qty2) !='0' AND COUNT(B3.Qty3) !='0';
,
您遇到的问题不仅仅是错误的别名:
这是正确的代码(没有错误的代码):
SELECT ItName,`Quantity 1`,`Quantity 2`,`Quantity 3`
FROM
(
SELECT A.ItName,COUNT(B.Qty) AS 'Quantity 1',COUNT(B.Qty2) AS 'Quantity 2',COUNT(B.Qty3) AS 'Quantity 3'
FROM tblitem A
INNER JOIN tblstocksummary B ON A.ItCode = B.ItCode
WHERE A.Itcode='IL001-000151'
GROUP BY A.ItName,A.ItCode
HAVING COUNT(B.Qty) !='0'AND COUNT(B.Qty2) !='0' AND COUNT(B.Qty3) !='0'
UNION
SELECT A2.ItName,COUNT(B2.Qty3)
FROM tblitem A2
INNER JOIN tblstocksummary B2 ON A2.ItCode = B2.ItCode
WHERE A2.Itcode='IL001-000373'
GROUP BY A2.ItName,A2.ItCode
HAVING COUNT(B2.Qty) !='0'AND COUNT(B2.Qty2) !='0' AND COUNT(B2.Qty3) !='0'
) t
UNION ALL
SELECT A3.ItName,COUNT(B3.Qty3) FROM tblitem A3
INNER JOIN tblstocksummary B3 ON A3.ItCode = B3.ItCode
WHERE A3.Itcode='IL001-000166'
GROUP BY A3.ItName,A3.ItCode
HAVING COUNT(B3.Qty) !='0'AND COUNT(B3.Qty2) !='0' AND COUNT(B3.Qty3) !='0';
- 我已将
Qty,Qty2 and Qty3
替换为'Quantity 1','Quantity 2','Quantity 3'
- 还将
ON A2.ItCode = B3.ItCode
替换为ON A3.ItCode = B3.ItCode
,您可以在其中看到您的表别名是 此查询错误。 - 我在每个组中添加了一个
ItName
这是我的演示:DEMO
,对于三个不同的 A.ItCode
,您不需要三个不同的 select 查询与 union all 结合,而是可以使用 in
子句通过单个 select 查询获取三个不同的产品。
SELECT A.ItCode,A.ItName,COUNT(B.Qty) 'Quantity',COUNT(B.Qty2) 'Quantity2',COUNT(B.Qty3) 'Quantity3'
FROM tblitem A
INNER JOIN tblstocksummary B ON A.ItCode = B.ItCode AND A.ItCode in ('IL001-000151','IL001-000373','IL001-000166')
GROUP BY A.ItCode
HAVING 'Quantity' !='0' AND 'Quantity2' !='0' AND 'Quantity3' !='0'
,
我已经试过了,它和我想要的一样工作
SELECT A.ItCode 'Item Code',A.ItName 'Item Name',COUNT(B.Qty3) 'Quantity3'
FROM tblitem A
INNER JOIN tblstocksummary B ON A.ItCode = B.ItCode AND A.ItCode = 'IL001-000151'
GROUP BY A.ItCode
HAVING 'Quantity' !='0' AND 'Quantity2' !='0' AND 'Quantity3' !='0'
UNION ALL
SELECT A.ItCode,COUNT(B.Qty3) 'Quantity3'
FROM tblitem A
INNER JOIN tblstocksummary B ON A.ItCode = B.ItCode AND A.ItCode = 'IL001-000373'
GROUP BY A.ItCode
HAVING 'Quantity' !='0' AND 'Quantity2' !='0' AND 'Quantity3' !='0'
UNION ALL
SELECT A.ItCode,COUNT(B.Qty3) 'Quantity3'
FROM tblitem A
INNER JOIN tblstocksummary B ON A.ItCode = B.ItCode AND A.ItCode = 'IL001-000166'
GROUP BY A.ItCode
HAVING 'Quantity' !='0' AND 'Quantity2' !='0' AND 'Quantity3' !='0'
但我认为这段代码可以更短一些。但我不知道如何缩短它。有什么建议吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。