2014-01-22 44 views
2

可以說今天的日期是2014年1月22日 並且我運行的報表具有下表(表),但是2014年1月1日至2014年1月18日的SIdate 的輸入範圍。如何創建一個sql腳本來考慮兩列?

我想根據我輸入的SIdate顯示所有行,這是2014年1月1日至2014年1月18日的日期,但CMdate也應該考慮並且應該通過日期參數。

正如你在表2(我的期望輸出)已經注意到,第6行是不存在了bcore CMdate是2014年1月21日

表1

Emp SIDate item TotQty  TotAmt  CMDate  CMAmt 
------------------------------------------------------- 
CLO 01-01-14 item1 120  1500.00  null  null 
CLO 01-02-14 item2 80  500.00  01-05-14 20.00 
CLO 01-05-14 item6 21  1100.00  null  null 
CLO 01-10-14 item5 100  2000.00  01-10-14 200.00 
CLO 01-12-14 item9 300  100.00  null  null 
CLO 01-16-14 item3 150  650.00  01-21-14 150.00 

表2(所需的輸出)

Emp SIDate item TotQty  TotAmt  CMDate  CMAmt 
------------------------------------------------------- 
CLO 01-01-14 item1 120  1500.00  null  null 
CLO 01-02-14 item2 80  500.00  01-05-14 20.00 
CLO 01-05-14 item6 21  1100.00  null  null 
CLO 01-10-14 item5 100  2000.00  01-10-14 200.00 
CLO 01-12-14 item9 300  100.00  null  null 

任何輸入將非常感激。

+0

所有回答做了很大的幫助。謝謝大家:) – user1840952

回答

1

你需要重複過濾器上的兩列,可選擇允許一個NULL CMDate

SELECT 
    Emp, SIDate, item, TotQty, TotAmt, CMDate, CMAmt 
FROM 
    Table1 
WHERE 
    SIDate BETWEEN '2014-01-01' AND '2014-01-18' 
    AND (CMDate IS NULL OR CMDate BETWEEN '2014-01-01' AND '2014-01-18'); 

Fiddle here

(順便說一句,使用像日期格式的ISO這樣的標準將會很長一段時間以避免日期格式相關的問題)

+0

非常感謝:) – user1840952

0

試試這個:

SELECT a.Emp, a.SIDate, a.item, a.TotQty, a.TotAmt, a.CMDate, a.CMAmt 
FROM tableA 
WHERE DATE_FORMAT(a.SIDate, '%m-%d-%Y') BETWEEN '2014-01-01' AND '2014-01-18' AND 
     1 = (CASE WHEN a.CMDate IS NULL THEN 1 
       WHEN DATE_FORMAT(a.CMDate, '%m-%d-%Y') BETWEEN '2014-01-01' AND '2014-01-18' THEN 1 
       ELSE 0 
      END) 
0

這應該這樣做:

SELECT * FROM TABLE WHERE (CMDate IS NULL OR (CMDate >= MIN(SIDate) AND CMDate <= MAX(SIDate));

1
select * from table where (cmdate between '01-01-2014' and '18-01-2014' or cmdate is null) and sidate between '01-01-2014' and '18-01-2014' 
1
SELECT tbl.* 
FROM Table1 AS tbl 
WHERE tbl.SIDate >= '01-01-14' AND tbl.SIDate <='01-18-14' 
AND tbl.CMDate >= '01-01-14' AND tbl.CMDate <='01-18-14' 

OR

SELECT tbl.* 
FROM Table1 AS tbl 
WHERE tbl.SIDate BETWEEN '01-01-14' AND '01-19-14' 
AND tbl.CMDate BETWEEN '01-01-14' AND '01-19-14'