2012-06-26 2 views
0

Je travaille sur un rapport de projet qui nécessite une sortie difficile d'une seule table.Impossible d'obtenir la sortie souhaitée dans mysql

C'est la structure de la table nommée: daily_visit_expenses daily_visit_expenses

ayant des données comme celui-ci :: enter image description here

maintenant ce que je veux que la sortie est la combinaison de ces trois requêtes en une seule colonne (un nom), les requêtes sont:

SELECT DISTINCT(`cust_1`) FROM `daily_visit_expenses` WHERE user='sanjay' AND `purpose_1`='Sales' 
SELECT DISTINCT(`cust_2`) FROM `daily_visit_expenses` WHERE user='sanjay' AND `purpose_2`='Sales' 
SELECT DISTINCT(`cust_3`) FROM `daily_visit_expenses` WHERE user='sanjay' AND `purpose_3`='Sales' 

Je veux obtenir la sortie d'une seule requête qui est la combinaison des trois requêtes ci-dessus dans une seule colonne comme customers qui est DISTINCT.

SQL Export:

CREATE TABLE IF NOT EXISTS `daily_visit_expenses` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `user` varchar(255) NOT NULL, 
    `date` date NOT NULL, 
    `status` varchar(50) NOT NULL, 
    `location` varchar(50) NOT NULL, 
    `cust_1` varchar(255) NOT NULL, 
    `cust_2` varchar(255) NOT NULL, 
    `cust_3` text NOT NULL, 
    `cust_4` text NOT NULL, 
    `purpose_1` varchar(20) NOT NULL, 
    `purpose_2` varchar(20) NOT NULL, 
    `purpose_3` varchar(20) NOT NULL, 
    `purpose_4` varchar(20) NOT NULL, 
    `visit_type` varchar(20) NOT NULL, 
    `expenses` bigint(20) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ; 

INSERT INTO `daily_visit_expenses` (`id`, `user`, `date`, `status`, `location`, `cust_1`, `cust_2`, `cust_3`, `cust_4`, `purpose_1`, `purpose_2`, `purpose_3`, `purpose_4`, `visit_type`, `expenses`) VALUES 
(5, 'sanjay', '2012-06-15', 'Working', 'Customer', 'S.G.R.S. Chemical & Minral Industries', '', 'fatehpur foundry', '', 'Sales', '', 'Sales', '', 'Outstation', 2323), 
(8, 'sanjay', '2012-06-25', 'Working', 'Office', '', '', '', '', '', '', '', '', '', 0), 
(9, 'sanjay', '2012-06-09', 'Working', 'Office', '', '', '', '', '', '', '', '', '', 0), 
(10, 'sanjay', '2012-06-05', 'Working', 'Customer', 'V.N INTERNATIONAL', 'G.SURGIWEAR', '', '', 'Sales', 'Sales', '', '', 'Outstation', 332), 
(11, 'sanjay', '2012-06-30', 'Working', 'Customer', 'Ganesh Plywood-Sitapur', '', '', '', 'Service', '', '', '', 'Outstation', 434), 
(12, 'sanjay', '2012-06-04', 'Absent', '', '', '', '', '', '', '', '', '', '', 0), 
(13, 'sanjay', '2012-06-06', 'Absent', '', '', '', '', '', '', '', '', '', '', 0), 
(14, 'sanjay', '2012-06-08', 'Leave', '', '', '', '', '', '', '', '', '', '', 0); 
+0

@Rinzler: requête s'il vous plaît ... –

+0

Pouvez-vous fournir un fichier dump.sql je pourrais utiliser pour créer/remplir une table similaire sur ma fin, je peux tester mon question? – sberry

+0

@sberry: ajout du vidage sql ... –

Répondre

1

Essayez d'utiliser UNION

SELECT DISTINCT(`cust_1`) FROM `daily_visit_expenses` WHERE user='sanjay' AND `purpose_1`='Sales' 
UNION DISTINCT 
SELECT DISTINCT(`cust_2`) FROM `daily_visit_expenses` WHERE user='sanjay' AND `purpose_2`='Sales' 
UNION DISTINCT 
SELECT DISTINCT(`cust_3`) FROM `daily_visit_expenses` WHERE user='sanjay' AND `purpose_3`='Sales'; 

Edit: Changé pour UNION DISTINCT

0

Essayez ceci, je pense que ce dont vous avez besoin si je ne l'ai pas mal compris question:

SELECT DISTINCT(`customer`) FROM 
(
SELECT `cust_1` FROM `daily_visit_expenses` WHERE user='sanjay' AND `purpose_1`='Sales' UNION ALL 
SELECT `cust_2` FROM `daily_visit_expenses` WHERE user='sanjay' AND `purpose_2`='Sales' UNION ALL 
SELECT `cust_3` FROM `daily_visit_expenses` WHERE user='sanjay' AND `purpose_3`='Sales') 
-2

Cela devrait fonctionner:

SELECT DISTINCT(`cust_1`,`cust_2`,`cust_3`) FROM `daily_visit_expenses` 
WHERE user='sanjay' AND (`purpose_1`='Sales' OR `purpose_2`='Sales' OR 
`purpose_3`='Sales') 
+0

L'opérande doit contenir 1 colonne (s) ... –

1
mysql> SELECT DISTINCT(`customer`) FROM (SELECT `cust_1` as `customer` FROM `daily_visit_expenses` WHERE user='sanjay' AND `purpose_1`='Sales' UNION ALL SELECT `cust_2` as `customer` FROM `daily_visit_expenses` WHERE user='sanjay' AND `purpose_2`='Sales' UNION ALL SELECT `cust_3` as `customer` FROM `daily_visit_expenses` WHERE user='sanjay' AND `purpose_3`='Sales') as t; 
+---------------------------------------+ 
| customer        | 
+---------------------------------------+ 
| S.G.R.S. Chemical & Minral Industries | 
| V.N INTERNATIONAL      | 
| G.SURGIWEAR       | 
| fatehpur foundry      | 
+---------------------------------------+ 
4 rows in set (0.00 sec) 
Questions connexes