Else未在mysql查询中运行

Else未在mysql查询中运行,mysql,sql,database,Mysql,Sql,Database,我有以下疑问。在这方面,我有是和否的情况。 是,正在访问,但其他部分不工作。请看看这个 SELECT SalesChannel.name , count(Transaction.category_id) as count, (case when (Transaction.no_of_units > 0 and Transaction.mop > 0) THEN 'yes' ELSE 'No' END) AS Is_Present from outlets Outlet inner j

我有以下疑问。在这方面,我有是和否的情况。 是,正在访问,但其他部分不工作。请看看这个

SELECT SalesChannel.name , count(Transaction.category_id) as count, (case when (Transaction.no_of_units > 0 and Transaction.mop > 0) THEN 'yes' ELSE 'No' END) AS Is_Present from outlets Outlet inner join transactions Transaction on Outlet.id = Transaction.outlet_id inner join sale_channels SalesChannel on SalesChannel.id = Outlet.sale_channel_id group by SalesChannel.name 
输出应如下所示

   KU      Electrical  
Yes   6       2  
No    1       2  
6是KU的计数器,Yes表示存在,类似地,No表示不存在KU

select SalesChannel.name , 
Transaction.category_id, 
count(Transaction.category_id) as count,   
from outlets Outlet inner join transactions Transaction on Outlet.id = Transaction.outlet_id inner join sale_channels SalesChannel on SalesChannel.id = Outlet.sale_channel_id group by SalesChannel.name
下面是我用过的三张表 1.交易

2.出口

3.销售陈纳德

如果不存在“销售渠道”,则创建表( `id`int(11)不为空, `name`varchar(255)不为空, `_active`tinyint(1)不为空, `已创建`日期时间不为空, `修改的`日期时间不为空 )ENGINE=InnoDB AUTO_INCREMENT=3默认字符集=1; -- --表`销售渠道'的倾销数据` -- 插入“销售渠道”('id'、'name'、'is'u active'、'created'、'modified')值 (1,'KU',1,'2016-10-03 00:00:00','2016-10-03 00:00:00'), (2,“电气”,1,“2016-10-04 00:00:00”,“2016-10-04 00:00:00”);
您正在聚合数据,以便每个SalesChannel.name获得一行数据。SalesChannel.name中可能有一些交易记录的结果为“是”,而另一些记录的结果为“否”,那么“存在”应该是什么呢

查询的另一个问题是销售渠道位于表中。目前有两个,但有时可能有三个、四个或数千个。SQL查询不会生成列数可变的结果。这些列必须事先知道。因此,可能的结果如下所示:

Name Yes No KU 6 1 Electrical 2 2 姓名是否 KU 6 1 电气2 2 因为你知道你只想要是或否,不管有多少频道

查询:

select 
  sc.name,
  count(case when t.no_of_units > 0 and t.mop > 0 then 1 end) as yes,
  count(case when t.no_of_units <= 0 or t.mop <= 0 then 1 end) as no
from sale_channels sc
join outlet o on o.sale_channel_id = sc.id
join transactions t on t.outlet_id = o.id;
选择
理学士姓名,
计数(当单位的t.no\u>0且t.mop>0,则1结束时的情况)为是,

计数(当t.no_of_units时,表中没有与else条件匹配的数据。您的条件是两个字段的表值中不匹配的“Transaction.no_of_>0和Transaction.mop>0”大于0


否则,else条件可以正常工作。

实际上应该按事务进行分组。category\u id。但是当我使用category\u id分组时,只有一行出现。请帮助我。我需要问题部分中给出的所需输出。salechannels是多个动态的。您请求的结果显示通道名称和是/否的网格。什么类别是否与此有关?好的计数(Transaction.category\u id)作为计数显示我进入特定类别的次数。是将显示Transaction.no\u of_units>0和Transaction.mop>0,如果我不明白。您已经显示了要查看的结果。您的结果中没有类别,那又如何“特定类别"你说的是什么?如果你想要一个特定的类别,请使用where子句。如果你想要的不是每个频道的结果,而是每个类别的结果,请按类别分组,并显示此结果而不是频道。如果你想要两者,请在你的选择列表和分组方式中同时显示。请让它的其他部分工作。这不起作用。我很乐意为你的努力打分请注意,您在查询方面非常专业和有经验。请整理一下。 CREATE TABLE IF NOT EXISTS `sale_channels` ( `id` int(11) NOT NULL, `name` varchar(255) NOT NULL, `is_active` tinyint(1) NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; -- -- Dumping data for table `sale_channels` -- INSERT INTO `sale_channels` (`id`, `name`, `is_active`, `created`, `modified`) VALUES (1, 'KU', 1, '2016-10-03 00:00:00', '2016-10-03 00:00:00'), (2, 'Electricals', 1, '2016-10-04 00:00:00', '2016-10-04 00:00:00');
Name Yes No KU 6 1 Electrical 2 2
select 
  sc.name,
  count(case when t.no_of_units > 0 and t.mop > 0 then 1 end) as yes,
  count(case when t.no_of_units <= 0 or t.mop <= 0 then 1 end) as no
from sale_channels sc
join outlet o on o.sale_channel_id = sc.id
join transactions t on t.outlet_id = o.id;