【发布时间】:2015-08-23 07:46:53
【问题描述】:
首先抱歉,如果我的英语不好,那不是我的母语。
我有两个表(A 和 B),包含以下列:
答: PRENUMERO (ID)、DATA、ARMAZEM、TIPO
和
乙: Autoreg (ID)、PRENUMERO、PRODUTO
我想要这样的结果:
*CountA、CountB、CountC、日期*
CountA 是当 PRODUTO 等于 1 时。
CountB 是当 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?)
(IF PRODUTO = 1 THEN CountA; IF 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 sql if-statement count conditional-statements