2014-02-24 21 views
1

我有以下SQL腳本:更換多個創建只是一個SELECT語句中VIEW - MySQL的

CREATE OR REPLACE ALGORITHM=UNDEFINED VIEW `day0` AS 
SELECT `c`.`customerId` AS `CustomerID`,SUM(`t`.`orderTotal`) AS `Day0`, 
     `t`.`dateOfSale` AS `DateOfSale`,`c`.`initialDateOfSale` AS `InitialDateOfSale`  
FROM `customer` `c` LEFT JOIN 
    `transaction` `t` 
     on `t`.`customerId` = `c`.`customerId` 
where `t`.`status` = 2 and `t`.`dateOfSale` <= DATE_ADD(`c`.`initialDateOfSale`, interval 1 day) 
GROUP BY `c`.`customerId'; 

CREATE OR REPLACE ALGORITHM=UNDEFINED VIEW `day30` AS 
SELECT `c`.`customerId` AS `CustomerID`,SUM(`t`.`orderTotal`) AS `Day30`, 
     `t`.`dateOfSale` AS `DateOfSale`,`c`.`initialDateOfSale` AS `InitialDateOfSale` 
FROM `customer` `c` LEFT JOIN 
    `transaction` `t` 
    on `t`.`customerId` = `c`.`customerId` 
where `t`.`status` = 2 and `t`.`dateOfSale` <= DATE_ADD(`c`.`initialDateOfSale`, interval 30 day) 
GROUP BY `c`.`customerId`; 

CREATE OR REPLACE ALGORITHM=UNDEFINED VIEW `day60` AS 
SELECT `c`.`customerId` AS `CustomerID`,SUM(`t`.`orderTotal`) AS `Day60`, 
     `t`.`dateOfSale` AS `DateOfSale`,`c`.`initialDateOfSale` AS `InitialDateOfSale` 
FROM `customer` `c` LEFT JOIN 
    `transaction` `t` 
    on `t`.`customerId` = `c`.`customerId` 
where `t`.`status` = 2 and `t`.`dateOfSale` <= DATE_ADD(`c`.`initialDateOfSale`, interval 60 day) 
GROUP BY `c`.`customerId`; 

SELECT day0.customerid,day0.day0, day30.day30, day60.day60, 
FROM day0, day30, day60, 
WHERE day0.customerid=day0.customerid and day0.customerid=day30.customerid and 
     day0.customerid=day60.customerid 

反正是有取代只有一個選擇多個CREATE VIEW語句,而無需創建數據庫中新視圖/表?除此之外,最終用戶不具備CREATE VIEW特權。

謝謝

Oikif

+0

如果你格式化了代碼,它會有所幫助。作爲提示:當你在每行上至少有四個空格時,它們看起來像是代碼。 –

+0

對不起!修復它 – user3348092

回答

0

MySQL中的觀點基本上只是代表一個查詢表。如果,例如,我們正在做一些簡單的像這樣:

CREATE OR REPLACE VIEW 'myView' AS SELECT matNumber, SUM(inv) FROM inventory; 
SELECT matNumber, totalInventory FROM myView; 

您可以通過使用子查詢替換它:

SELECT new_inventory.matNumber, 
     new_inventory.totalInventory 
FROM (SELECT matNumber, sum(inv) FROM inventory) new_inventory; 

只記得每一個派生表需要的別名。雖然這不是解決您確切問題的方法,但它應該爲您提供總體方向。

+0

謝謝你的回答。 – user3348092

1

你可以得到你想要一個簡單的查詢內容:

SELECT c.`customerId` AS `CustomerID` , 
     SUM(case when `t`.`dateOfSale` <= DATE_ADD(`c`.`initialDateOfSale`, interval 1 day) 
       then `t`.`orderTotal` 
       else 0 
      end) AS `Day0`, 
     SUM(case when `t`.`dateOfSale` <= DATE_ADD(`c`.`initialDateOfSale`, interval 60 day) 
       then `t`.`orderTotal` 
       else 0 
      end) AS `Day60`, 
     SUM(case when `t`.`dateOfSale` <= DATE_ADD(`c`.`initialDateOfSale`, interval 90 day) 
       then `t`.`orderTotal` 
       else 0 
      end) AS `Day90`, 
     `t`.`dateOfSale` AS `DateOfSale`, `c`.`initialDateOfSale` AS `InitialDateOfSale` 
FROM `customer` `c` LEFT JOIN 
    `transaction` `t` 
    on `t`.`customerId` = `c`.`customerId` 
where `t`.`status` = 2 
GROUP BY `c`.`customerId`; 

就可以圍繞這個查詢視圖。

+0

太棒了!謝謝Gordon。這正是我所期待的! – user3348092