首先抱歉,如果我的英语不好,那不是我的母语。
我有两个带有以下列的表(A和B):
A:
PRENUMERO(ID),数据,ARMAZEM,TIPO
和
B:
Autoreg(ID),PRENUMERO,PRODUTO
我想要这样的结果:
* CountA,CountB,CountC,DATE *
CountA是PRODUTO等于1。
计数B是PRODUTO大于1。
CountC是PRODUTO在同一PRENUMERO中同时具有1和> 1的情况。
我这样加入表格:
SELECT DISTINCT
b.[Autoreg],
a.[PRENUMERO],
b.[PRENUMERO],
b.[PRODUTO]
FROM
b.[VendasPOS_Linhas]
JOIN a
ON b.[PRENUMERO]=a.[PRENUMERO]
WHERE
a.[DATA] > '2015-06-01 00:00:00.000' AND
a.[Armazem] = '111'
结果如下:
因此,如果我[PRENUMERO] ='1'(对于CountA),则结果应为例如1000;如果我[PRENUMERO]>'1'(对于CountB),则结果应为例如1100,而CountC应为休息(667)。但是我不知道该怎么做。
如您在第11行和第12行中所见,它们具有相同的PRENUMERO,但PRODUTO为1,另一个为10900 ...所以这是针对CountC的。如果PRENUMERO相同(几个完全相同的PRENUMERO),但PRODUTO为1(CountA(如第8和9行))或> 1(CountB),则此计数仅计为1(此处是DICTINCT?)。
(如果PRODUTO = 1 THEN CountA;如果PRODUTO> 1 THEN CountB)
编辑:
所以我这样做:
SELECT
(SELECT
COUNT(DISTINCT [B].[PRENUMERO])
FROM
[B]
JOIN [A]
ON [B].[PRENUMERO] = [A].[PRENUMERO]
WHERE
[A].[DATA] > '2015-06-01 00:00:00.000' AND
[A].[Armazem] = '454' AND
[B].[PRODUTO] > '1') AS X,
(SELECT
COUNT(DISTINCT [B].[PRENUMERO])
FROM
[B]
JOIN [A]
ON [B].[PRENUMERO] = [A].[PRENUMERO]
WHERE
[A].[DATA] > '2015-06-01 00:00:00.000' AND
[A].[Armazem] = '454' AND
[B].[PRODUTO] = '1') AS Y,
(SELECT COUNT([A].[PRENUMERO]) from A where DATA> '2015-06-01 00:00:00.000' and Armazem = '454') AS Total
结果如下:
但是我认为这是错误的,因为它也在计算CountC。
例如:
如果PRENUMERO与1相同且> 1,则它属于CountC。我该怎么做不算呢? (如何检查PRENUMERO是否没有1和> 1(不同的行))
最佳答案
MySQL对此非常方便,因为它非常宽容类型转换:
SELECT SUM(PRODUTO = 1) AS countA,
SUM(PRODUTO > 1) AS countB,
SUM((PRODUTO = 1) AND (PRENUMERO > 1)) AS countC
...
MySQL将采用
=
和>
测试的布尔值true / false,将它们转换为整数0
和1
,它们对这些整数求和,从而得到计数。