首先抱歉,如果我的英语不好,那不是我的母语。

我有两个带有以下列的表(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,将它们转换为整数01,它们对这些整数求和,从而得到计数。

09-28 14:38