2017-08-03 57 views
0

我有2個表,evoucherspos_vendor_map。 pos_vendor_map表中有POS_ID的列表。消息傳送者將具有多個事務並且可以具有相同的POS_ID。根據另一個表的值運行查詢

pos_vendor_map:

ID POS_ID  VendorName 
1 1   Test1 
2 2   Test2 

電子獎券:

ID TRANS_TYPE TRANS_AMOUNT TRANS_STATUS POS_ID 
1 1   2000   1   1 
2 1   3000   1   1 
3 1   1000   1   2 
4 1   5000   1   2 

現在我想交易的總和從evouchers表中的每個POS_ID。因此,這將是像

foreach(POS_ID) 
{ 
SUM(TRANS_AMOUNT) 
} 

目前我得到的結果,但通過查詢給POS_ID,我希望它是動態的,要檢查POS_IDs的總數,然後對每個運行此查詢。

SELECT 
    (SUM(IF(ev.TRANS_TYPE='1', ev.TRANS_AMOUNT,0)) - SUM(IF(ev.TRANS_TYPE='2', ev.TRANS_AMOUNT,0))) AS CreditStatus, 
    (select pvm.VENDOR_NAME from pos_vendor_map pvm where pvm.POS_ID = ev.POS_ID) AS VendorName 
FROM 
    evouchers ev 
WHERE 
    ev.POS_ID='1' and ev.TRANS_STATUS='1'; 

感謝

回答

1

您的查詢可能應該是這樣的:

SELECT SUM(CASE WHEN ev.TRANS_TYPE = 1 THEN ev.TRANS_AMOUNT 
       WHEN ev.TRANS_TYPE = 2 THEN -ev.TRANS_AMOUNT 
       ELSE 0 
      END) as CreditStatus 
     -- pvm.VENDOR_NAME 
FROM evouchers ev JOIN 
    pos_vendor_map pvm 
    ON pvm.POS_ID = ev.POS_ID; 

如果你想每一個行POS_ID,然後:

SELECT SUM(CASE WHEN ev.TRANS_TYPE = 1 THEN ev.TRANS_AMOUNT 
       WHEN ev.TRANS_TYPE = 2 THEN -ev.TRANS_AMOUNT 
       ELSE 0 
      END) as CreditStatus, 
     pvm.VENDOR_NAME 
FROM evouchers ev JOIN 
    pos_vendor_map pvm 
    ON pvm.POS_ID = ev.POS_ID 
GROUP BY ev.POS_ID, pvm.VENDOR_NAME 
+0

是完全相同。我用下面的方法解決了這個問題,但你的問題也是一樣的。謝謝。 'SELECT \t ev.POS_ID \t,pvm.VENDOR_NAME AS VENDORNAME \t,(SUM(IF(ev.TRANS_TYPE = '1',ev.TRANS_AMOUNT,0)) - SUM(IF(ev.TRANS_TYPE = '2' ,ev.TRANS_AMOUNT,0)))AS CreditStatus FROM evouchers EV左加入上pvm.POS_ID = ev.POS_ID pos_vendor_map PVM WHERE ev.TRANS_STATUS = '1' GROUP BY \t ev.POS_ID \t, pvm.VENDOR_NAME;' –

0

你可以從這個查詢發現和

select POS_ID,count(POS_ID) total from evoucher group by POS_ID 
0

如果你想累計總和,你可以嘗試這樣的事:

SELECT C.VendorName 
,A.* 
, @r:= CASE WHEN @g=A.POS_ID THEN 
      CASE WHEN A.TRANS_TYPE=1 THEN @r+A.TRANS_AMOUNT WHEN A.TRANS_TYPE=2 THEN @r-A.TRANS_AMOUNT ELSE 0 END 
     ELSE A.TRANS_AMOUNT END AS AMOUNT 
, @g:=A.POS_ID g 
FROM EVOUCHER A 
CROSS JOIN (SELECT @r:=0 , @g:=0) B 
INNER JOIN POS_VENDOR C ON A.POS_ID = C.POS_ID 
ORDER BY A.POS_ID, A.ID; 

輸出:

VendorName id trans_type trans_amount trans_status pos_id AMOUNT g 
Test1 1 1 2000 1 1 2000 1 
Test1 2 1 3000 1 1 5000 1 
Test1 5 2 1000 1 1 1000 1 
Test2 3 1 1000 1 2 1000 2 
Test2 4 1 5000 1 2 6000 2 
Test2 6 2 500 1 2 500 2 

的樣本數據:

CREATE TABLE EVOUCHER(id int, trans_type int, trans_amount int, trans_status int, pos_id int); 
INSERT INTO EVOUCHER VALUES (1,1,2000,1,1); 
INSERT INTO EVOUCHER VALUES (2,1,3000,1,1); 
INSERT INTO EVOUCHER VALUES (3,1,1000,1,2); 
INSERT INTO EVOUCHER VALUES (4,1,5000,1,2); 
INSERT INTO EVOUCHER VALUES (5,2,1000,1,1); 
INSERT INTO EVOUCHER VALUES (6,2,500,1,2); 
CREATE TABLE POS_VENDOR (id int, pos_id int, VendorName VARCHAR(20)); 
INSERT INTO POS_VENDOR VALUES (1,1,'Test1'); 
INSERT INTO POS_VENDOR VALUES (2,2,'Test2'); 
相關問題