2016-10-06 2 views
-1

다음 쿼리가 있습니다. 이 경우 나는 그렇고 어떤 경우도 가지지 않습니다. 예는 액세스 중이지만 부분이 작동하지 않습니다. 이것 좀보세요.Else가 mysql에서 실행되지 않습니다. 쿼리

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의 카운터이고, 예는 존재를 지칭 아래이어야 마찬가지로 상관 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. 거래

CREATE TABLE IF NOT EXISTS `transactions` (
`id` int(11) NOT NULL, 
    `zone_id` int(11) NOT NULL, 
    `state_id` int(11) NOT NULL, 
    `city_id` int(11) NOT NULL, 
    `category_id` int(11) NOT NULL, 
    `sub_category_id` int(11) NOT NULL, 
    `brand_id` int(11) NOT NULL, 
    `model_id` int(11) NOT NULL, 
    `outlet_id` int(11) NOT NULL, 
    `no_of_units` int(11) NOT NULL, 
    `mop` decimal(10,2) NOT NULL 
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; 

-- 
-- Dumping data for table `transactions` 
-- 

INSERT INTO `transactions` (`id`, `zone_id`, `state_id`, `city_id`, `category_id`, `sub_category_id`, `brand_id`, `model_id`, `outlet_id`, `no_of_units`, `mop`) VALUES 
(1, 2, 2, 2, 2, 1, 1, 1, 1, 3, '6.00'), 
(2, 2, 2, 2, 2, 1, 1, 1, 1, 3, '6.00'), 
(3, 1, 1, 1, 1, 1, 1, 1, 1, 4, '2.00'), 
(4, 2, 2, 2, 1, 1, 1, 1, 2, 4, '2.00'); 

2.outlets

CREATE TABLE IF NOT EXISTS `outlets` (
`id` int(11) NOT NULL, 
    `outlet_code` varchar(255) NOT NULL, 
    `name` varchar(255) NOT NULL, 
    `zone_id` int(11) NOT NULL, 
    `state_id` int(11) NOT NULL, 
    `city_id` int(11) NOT NULL, 
    `sale_channel_id` int(11) 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 `outlets` 
-- 

INSERT INTO `outlets` (`id`, `outlet_code`, `name`, `zone_id`, `state_id`, `city_id`, `sale_channel_id`, `is_active`, `created`, `modified`) VALUES 
(1, '1508', 'Ashok electricals', 2, 2, 2, 1, 1, '2016-10-03 00:00:00', '2016-10-03 00:00:00'), 
(2, '1233', 'vinayak electricals', 1, 1, 1, 2, 1, '2016-10-04 00:00:00', '2016-10-04 00:00:00'); 

3. sale_chennals

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'); 

답변

0

SalesChannel.name 당 하나 개의 행을 얻을 수 있도록 당신은 당신의 데이터를 집계하고 있습니다. SalesChannel.name에 대해 '예'와 '아니오'로 표시되는 트랜잭션 레코드가있을 수 있으므로 Is_Present는 무엇이되어야합니까?

검색어에 대한 또 다른 문제는 판매 채널이 테이블에 있다는 것입니다. 현재 두 가지가 있지만 언젠가는 3 ~ 4 또는 수천 가지가 될 수 있습니다. SQL 쿼리는 가변 개수의 열이있는 결과를 생성하지 않습니다. 미리 열을 알고 있어야합니다. 따라서 가능한 결과는 다음과 같습니다.

 
Name   Yes No 
KU   6  1 
Electrical 2  2 

얼마나 많은 채널이 있든 상관없이 Yes 또는 No로 설정하면됩니다.

쿼리 :

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; 
+0

실제로 Transaction.category_id별로 그룹화해야합니다. 하지만 category_id를 그룹화하여 사용할 때 한 행만 올 것입니다. 도와주세요. 나는 질문 부분에 주어진대로 필요한 출력을 원한다. salechannels은 여러 동적 있습니다. – sukh

+0

요청하신 결과에 채널 이름 및 예/아니요가 표시됩니다. 카테고리가이 작업과 관련이있는 것은 무엇입니까? –

+0

괜찮아요 (Transaction.category_id)로 카운트가 나는 perticular 카테고리를 입력 한 횟수를 보여줍니다. yes는 Transaction.no_of_units> 0이고 Transaction.mop> 0이고 그 값이 0보다 작 으면 표시됩니다. – sukh

1

다른 조건에 대해 일치 테이블에 데이터가 없습니다. 두 필드의 테이블 값이 일치하지 않는 "Transaction.no_of_units> 0 및 Transaction.mop> 0"이 0보다 큰 것입니다.

그렇지 않으면 조건이 정상적으로 작동합니다.

관련 문제