2017-07-12 26 views
0

我有兩個表格Table1 & Table2通過xid和Yid相互連接。Mysql-從特定條件下的兩列中選擇

表1

xid(int) category(varchar)  subcat(varchar) 

1   Venue     Resort 
2   Venue     Resort 
3   Venue     Resort 
4   Venue     Resort 
5   Venue     Resort 
6   Venue     Resort 
7   Venue     Banquet Hall 
8   Venue     Resort 
9   Apparel     Designer 

表2

Yid(int) minp(varchar)   maxp(varchar) 

1   800      1000 
2   900      1200 
3         1100 
4   1300     1600 
5         1800 
6   800      2000 
7   800      1000 
8   1500     2100 
9   15000     60000 

我已劃分這些供應商分爲三類即在具有價格小於盧比第一類別的供應商。 1000.第二類是價格低於1500且超過1000的供應商,價格超過1500的第三類。目前我只是比較價格與maxp和它爲我工作。

查詢我使用與MAXP比較是

SELECT xid from Table1,Table2 WHERE 
Table1.xid=Table2.Yid 
AND category='venue' 
AND subcat='Resort' 
AND maxp<=1000 

和輸出我得到是

xid 

1 
7 

現在我想用兩個MINP和MAXP我要計數,並取來比較價格所有這些xid,其中minp或maxp中的任何一個小於1000,在1000到1500之間,大於1500.

期望輸出小於Rs。 1000

xid 

1 
2 
6 
7 

預計產量超過盧比。 1000比小於等於1500

xid 

2 
3 
4 
8 

注:對於某些原因,我不能MINP和MAXP的數據類型從varchar更改爲int或長也,如果MINP爲空,不與它比較。

在此先感謝...

+0

其分貝?MySQL或MSSQL(SQL服務器) ? – etsa

+0

它的mysql數據庫 – Ashish

回答

0

您需要根據您的預期結果檢查兩列。

SELECT xid 
from Table1 
INNER JOIN Table2 
     ON Table1.xid=Table2.Yid 
Where category='venue' 
AND subcat='Resort' 
AND (minp<=1000 or minp<=1000) 
and minp <> '' 

要找到盧比。 1000比等於少1500

SELECT xid 
from Table1 
INNER JOIN Table2 
     ON Table1.xid=Table2.Yid 
Where category='venue' 
AND subcat='Resort' 
AND (minp > 1000 or maxp > 1000) and (minp <= 1500 or maxp <= 1500) 
and minp <> '' 

注:開始使用INNER JOIN語法,而不是舊式逗號分隔加入

+0

我已經使用了你的兩個查詢...兩者都不適用於minp和maxp ...選擇所有行.... – Ashish

0

我想你可以使用這樣的事情:

SELECT xid , CATEGORY, SUBCAT, minp, maxp 
    , CASE WHEN COALESCE(minp,0)<=1000 OR COALESCE(maxp,0)<=1000 THEN 1 ELSE 0 END AS CAT1 
    , CASE WHEN (COALESCE(minp,0)>1000 AND COALESCE(minp,0)<=1500) OR (COALESCE(maxp,0)>1000 AND COALESCE(maxp,0)<=1500) THEN 1 ELSE 0 END AS CAT2 
    , CASE WHEN COALESCE(minp,0)>1500 OR COALESCE(maxp,0)>1500 THEN 1 ELSE 0 END AS CAT3       
from Table1 A 
INNER JOIN Table2 B ON A.xid=B.Yid 
; 

輸出:

xid CATEGORY SUBCAT minp maxp CAT1 CAT2 CAT3 
1 Venue Resort 800 1000 1 0 0 
2 Venue Resort 900 1200 1 1 0 
3 Venue Resort NULL 1100 1 1 0 
4 Venue Resort 1300 1600 0 1 1 
5 Venue Resort NULL 1800 1 0 1 
6 Venue Resort 800 2000 1 0 1 
7 Venue BanquetH 800 1000 1 0 0 
8 Venue Resort 1500 2100 0 1 1 
9 Apparel Designer 15000 60000 0 0 1 

T o增加數量爲每個類別,你可以使用:

SELECT * 
FROM 
(SELECT xid , CATEGORY, SUBCAT, minp, maxp 
    , CASE WHEN COALESCE(minp,0)<=1000 OR COALESCE(maxp,0)<=1000 THEN 1 ELSE 0 END AS CAT1 
    , CASE WHEN (COALESCE(minp,0)>1000 AND COALESCE(minp,0)<=1500) OR (COALESCE(maxp,0)>1000 AND COALESCE(maxp,0)<=1500) THEN 1 ELSE 0 END AS CAT2 
    , CASE WHEN COALESCE(minp,0)>1500 OR COALESCE(maxp,0)>1500 THEN 1 ELSE 0 END AS CAT3      
from Table1 A 
INNER JOIN Table2 B ON A.xid=B.Yid) X 
CROSS JOIN (SELECT SUM(CASE WHEN CAT1=1 THEN 1 ELSE 0 END) AS CAT1_RC 
       ,SUM(CASE WHEN CAT2=1 THEN 1 ELSE 0 END) AS CAT2_RC 
       , SUM(CASE WHEN CAT3=1 THEN 1 ELSE 0 END) AS CAT3_RC 
       FROM (SELECT xid , CATEGORY, SUBCAT, minp, maxp 
        , CASE WHEN COALESCE(minp,0)<=1000 OR COALESCE(maxp,0)<=1000 THEN 1 ELSE 0 END AS CAT1 
        , CASE WHEN (COALESCE(minp,0)>1000 AND COALESCE(minp,0)<=1500) OR (COALESCE(maxp,0)>1000 AND COALESCE(maxp,0)<=1500) THEN 1 ELSE 0 END AS CAT2 
        , CASE WHEN COALESCE(minp,0)>1500 OR COALESCE(maxp,0)>1500 THEN 1 ELSE 0 END AS CAT3     
        from Table1 A 
        INNER JOIN Table2 B ON A.xid=B.Yid) X1 
      ) Y 
       ; 

輸出:

+-----+----------+-----------+-------+-------+------+------+------+---------+---------+---------+ 
| xid | CATEGORY | SUBCAT | minp | maxp | CAT1 | CAT2 | CAT3 | CAT1_RC | CAT2_RC | CAT3_RC | 
+-----+----------+-----------+-------+-------+------+------+------+---------+---------+---------+ 
| 1 | Venue | Resort | 800 | 1000 | 1 | 0 | 0 |  6 |  4 |  5 | 
| 2 | Venue | Resort | 900 | 1200 | 1 | 1 | 0 |  6 |  4 |  5 | 
| 3 | Venue | Resort | NULL | 1100 | 1 | 1 | 0 |  6 |  4 |  5 | 
| 4 | Venue | Resort | 1300 | 1600 | 0 | 1 | 1 |  6 |  4 |  5 | 
| 5 | Venue | Resort | NULL | 1800 | 1 | 0 | 1 |  6 |  4 |  5 | 
| 6 | Venue | Resort | 800 | 2000 | 1 | 0 | 1 |  6 |  4 |  5 | 
| 7 | Venue | Banquet H | 800 | 1000 | 1 | 0 | 0 |  6 |  4 |  5 | 
| 8 | Venue | Resort | 1500 | 2100 | 0 | 1 | 1 |  6 |  4 |  5 | 
| 9 | Apparel | Designer | 15000 | 60000 | 0 | 0 | 1 |  6 |  4 |  5 | 
+-----+----------+-----------+-------+-------+------+------+------+---------+---------+---------+ 
0

我想你需要嘗試這個。

1.You要既MINP和MAXP我希望到1000之間的數量和獲取所有這些XID其中MINP或MAXP任何這些小於1000,1500,比較價格超過1500

從表1選擇t1.xid t1,表2 t2 WHERE t1.xid = t2.Yid AND t1.category ='venue'AND t1.subcat ='Resort'AND(t2.maxp < = 1000或 t2.minp < = 1000)

  1. 輸出超過Rs。 1000且小於等於1500
從表1 T1

SELECT t1.xid,表2 T 2,其中t1.xid = t2.Yid AND t1.category = '場地' AND t1.subcat = '度假村' AND((t2.maxp> = 1000和 t2.maxp < = 1500)OR(t2.minp> = 1000和t2.minp < = 1500)