쿼리

2009-02-08 2 views
0

를 사용하여 MySQL의 테이블에서 필드의 합을 받기 전이 내, 데이타베이스에서 다음 표 .. 여기 쿼리

CREATE TABLE IF NOT EXISTS `client` (
    `CARD_NO` varchar(15) NOT NULL, 
    `F_NAME` varchar(20) NOT NULL, 
    `L_NAME` varchar(20) NOT NULL, 
    `SEX` varchar(5) NOT NULL, 
    `DOB` date NOT NULL, 
    `SUBCITY` varchar(10) NOT NULL, 
    `KEBELE` varchar(5) NOT NULL, 
    `HOUSE_NO` varchar(10) NOT NULL, 
    `TEL_NO` int(10) DEFAULT NULL, 
    `REGION_NO` varchar(10) DEFAULT NULL, 
    PRIMARY KEY (`CARD_NO`), 
    KEY `REGION_NO` (`REGION_NO`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

-- 
-- Dumping data for table `client` 
-- 

INSERT INTO `client` (`CARD_NO`, `F_NAME`, `L_NAME`, `SEX`, `DOB`, `SUBCITY`, `KEBELE`, `HOUSE_NO`, `TEL_NO`, `REGION_NO`) VALUES 
('1', '', '', 'male', '0000-00-00', '', '', '', NULL, '01'), 
('2', '', '', 'male', '0000-00-00', '', '', '', NULL, '02'), 
('3', '', '', 'femal', '0000-00-00', '', '', '', NULL, '03'), 
('4', '', '', 'femal', '0000-00-00', '', '', '', NULL, '04'), 
('5', '', '', 'male', '0000-00-00', '', '', '', NULL, '05'), 
('6', '', '', 'male', '0000-00-00', '', '', '', NULL, '05'); 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `non_pregnant` 
-- 

CREATE TABLE IF NOT EXISTS `non_pregnant` (
    `VCT_CODE` varchar(15) NOT NULL, 
    `CARD_NO` varchar(15) DEFAULT NULL, 
    `RISK_OF_HIV` varchar(30) NOT NULL, 
    `PURPOSE` varchar(10) NOT NULL, 
    PRIMARY KEY (`VCT_CODE`), 
    KEY `CARD_NO` (`CARD_NO`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

-- 
-- Dumping data for table `non_pregnant` 
-- 

INSERT INTO `non_pregnant` (`VCT_CODE`, `CARD_NO`, `RISK_OF_HIV`, `PURPOSE`) VALUES 
('1', '1', '', ''), 
('2', '2', '', ''), 
('3', '3', '', ''), 
('4', '4', '', ''), 
('5', '5', '', ''), 
('6', '6', '', ''); 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `non_pregnant_vct` 
-- 

CREATE TABLE IF NOT EXISTS `non_pregnant_vct` (
    `VCT_CODE` varchar(15) NOT NULL DEFAULT '', 
    `DATE_TESTED` date DEFAULT NULL, 
    `TB_RESULT` varchar(10) NOT NULL, 
    `HIV_RESULT` varchar(10) NOT NULL, 
    `STD_RESULT` varchar(10) NOT NULL, 
    PRIMARY KEY (`VCT_CODE`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

-- 
-- Dumping data for table `non_pregnant_vct` 
-- 

INSERT INTO `non_pregnant_vct` (`VCT_CODE`, `DATE_TESTED`, `TB_RESULT`, `HIV_RESULT`, `STD_RESULT`) VALUES 
('1', NULL, '', 'pos', ''), 
('2', NULL, '', 'pos', ''), 
('3', NULL, '', 'neg', ''), 
('4', NULL, '', 'neg', ''), 
('5', NULL, '', 'neg', ''), 
('6', NULL, '', 'pos', ''); 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `region` 
-- 

CREATE TABLE IF NOT EXISTS `region` (
    `REGION_NO` varchar(10) NOT NULL, 
    `REGION_NAME` varchar(10) NOT NULL, 
    PRIMARY KEY (`REGION_NO`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

-- 
-- Dumping data for table `region` 
-- 

INSERT INTO `region` (`REGION_NO`, `REGION_NAME`) VALUES 
('01', 'washington'), 
('02', 'newyork'), 
('03', 'london'), 
('04', 'paris'), 
('05', 'burlin'); 

내가 출력으로 원하는 것입니다 ..

지역 여성 남성 총 테스트 긍정적 인 테스트 긍정적 인 테스트,691 363,210 긍정적 인              

이것은 내가 그것을 알아 내려고 시도했지만 STIL 쿼리입니다 리터 잘못 ... 당신이 원하는 출력의

SELECT r.region_name, c.sex = 'male' as counting, c.sex = 'femal' as counting, v.hiv_result = 'pos' as MalePos from region r 
left join client c 
on c.region_no = r.region_no 
left join non_pregnant p 
on c.card_no = p.card_no 
left join non_pregnant_vct v 
on p.vct_code = v.vct_code 
group by c.region_no; 
+1

어떤 오류 메시지가 나타납니다? – Sebastian

+0

당신은 어떤 결과물을 얻고 있습니까? 무엇이 옳은 것과 비교 되는가? 당신은 정교하게 여기에 우리에게 도움을 줄 수 있습니다. –

+1

호기심에서 성별에 대한 추가 varchar가 실제로 그렇게 비쌉니까? ("femal"이 이상하게 보임) – BobbyShaftoe

답변

1

귀하의 설명을 아슬 아슬하게 불분명하다, 그러나 나는 그것에게 기회를 줄 것이다. 사용해보기 :

SELECT 
    r.region_name, 
    SUM(c.sex = 'male') as NMale, 
    SUM(c.sex = 'femal') as NFemale, 
    SUM(v.hiv_result = 'pos') as TotalPos, 
    SUM(c.sex = 'male' AND v.hiv_result = 'pos') as MalePos, 
    SUM(c.sex = 'femal' AND v.hiv_result = 'pos') as FemalePos 
FROM region r 
LEFT JOIN client c ON c.region_no = r.region_no 
LEFT JOIN non_pregnant p ON c.card_no = p.card_no 
LEFT JOIN non_pregnant_vct v ON p.vct_code = v.vct_code 
GROUP BY c.region_no 
+0

고마움, 남자 ... 나는 ur 대답을 appriciate ... 나는 거의 변화가 UR 코드를 만들고 그것을 완벽하게 작동합니다 .... 덕분에 많이. –