2009-11-29 56 views
0

我有一個訂單表幫助編寫複雜的連接查詢

orders (
id int unsigned not null, 
fcr_date TIMESTAMP, 
completion_date TIMESTAMP, 
factory_no varchar(255), 
vendor_no varchar(255)) 

請忽略這些數據類型錯別字如果有的話。

我想寫一個sql查詢,可以幫助我獲取每個供應商工廠的數據。獲取數據包括每個供應商廠的訂單數(vendor_no一組獨特的,factory_no),vendor_no,factory_no和用於其fcr_date比COMPLETION_DATE更大的訂單數。

我是新來的SQL和這個特定的查詢似乎很複雜,我。如果有人能指導我如何編寫這個查詢,我將不勝感激。

謝謝。

+1

忽略任何錯別字 - 但你需要突出的代碼或表定義的線,然後使用編輯器工具欄上的「代碼」按鈕(010 101),以獲得一個不錯的格式 - 否則,你的帖子看起來很恐怖或者甚至可能思念的東西..... – 2009-11-29 10:31:17

回答

3

你可以嘗試這樣的

SELECT vendor_no, 
     factory_no, 
     COUNT(1), 
     SUM(CASE WHEN fcr_date > completion_date THEN 1 ELSE 0 END) 
FROM @orders 
GROUP BY vendor_no, 
     factory_no 
+0

謝謝......這工作在pgsql的.. 感謝。 – Ishu 2009-11-29 10:57:13

+0

你好, 我想知道你是否可以幫助我這個。根據fcr日期大於完成日期的訂單的年齡百分比,要求已稍作更改。我寫了下面的查詢,但沒有任何幫助。 SELECT vendor_no作爲賣方, factory_no如工廠, COUNT(1),計數, SUM(CASE WHEN fcr_date> COMPLETION_DATE THEN 1 ELSE 0 END)作爲filter_orders, \t ROUND(filter_orders /計數* 100,4)作爲%的 FROM @orders GROUP BY vendor_no, factory_no HAVING百分比> 20 Postgre抱怨說,它需要一個所謂的百分比做此列。 – Ishu 2009-12-17 11:06:30

1
SELECT vendor_no, 
     factory_no, 
     COUNT(id), 
     SUM(IF(fcr_date > completion_date, 1, 0)) 
FROM  orders 
GROUP BY vendor_no, factory_no; 

對我的作品與MySQL的東西。

+0

IF似乎是PL/PgSQL的一部分..給我語法錯誤pgsql。 – Ishu 2009-11-29 10:57:47

0

Ishu,命名您的列比「%的」其他東西以百分比可能是一個pgSQL函數!