2010-11-25 160 views
0

我有以下查詢返回的採購訂單對供應商特定的公司(我們有多個公司在我們的小組)的總價值。添加日期範圍到SQL查詢

我想添加一個日期範圍使用poheader.orderdate,但因爲我沒有寫這個查詢,它比我用的稍微複雜,我不知道在哪裏添加此子句。

任何意見將不勝感激。

SELECT vendor.Vendorid AS 'ID', 
     vendor.name AS 'Name', 
     Total 
FROM vendor LEFT JOIN 
     (
      select sum (podetail.orderqty * podetail.unitcost) AS Total, 
        podetail.VendorNum, 
        podetail.Company 
      from podetail 
      where exists (
           select 1 
           from poHeader 
           where poHeader.OrderNum = podetail.OrderNum 
           and  poHeader.ApprovalStatus = 'A' 
          ) 
      and  exists (
           select 1 
           from vendor 
           WHERE vendor.company = 'MyCompany' 
           and  vendor.VendorNum = podetail.VendorNum 
           and  vendor.Company = podetail.Company 
          ) 
      group by podetail.VendorNum, 
         podetail.Company 
     ) OD ON vendor.Vendornum = OD.Vendornum 
       and vendor.Company = OD.Company 
WHERE vendor.company = 'MyCompany' 
ORDER BY vendor.name 

回答

1

好吧,一旦它被格式化,它就會看到所有可怕的東西,現在呢?

現在你可以看到where子句的位置了嗎?

喜歡的東西

SELECT vendor.Vendorid AS 'ID', 
     vendor.name AS 'Name', 
     Total 
FROM vendor LEFT JOIN 
     (
      select sum (podetail.orderqty * podetail.unitcost) AS Total, 
        podetail.VendorNum, 
        podetail.Company 
      from podetail 
      where exists (
           select 1 
           from poHeader 
           where poHeader.OrderNum = podetail.OrderNum 
           and  poHeader.ApprovalStatus = 'A' 
           /*-------PLACE THE Date Range Check HERE------*/ 
           AND  poheader.orderdate BETWEEN @StartDate AND @EndDate 
          ) 
      and  exists (
           select 1 
           from vendor 
           WHERE vendor.company = 'MyCompany' 
           and  vendor.VendorNum = podetail.VendorNum 
           and  vendor.Company = podetail.Company 
          ) 
      group by podetail.VendorNum, 
         podetail.Company 
     ) OD ON vendor.Vendornum = OD.Vendornum 
       and vendor.Company = OD.Company 
WHERE vendor.company = 'MyCompany' 
ORDER BY vendor.name 
+0

這當然可以讓我的頭更容易,謝謝! – 2010-11-25 10:22:59

+0

我試着添加'和poheader.orderdate BETWEEN'2010-11-24'和`2010-11-25「,但查詢返回的是與添加日期範圍之前一樣的」total「。任何想法,爲什麼這可能會發生? – 2010-11-25 10:24:30

1

我做一個假設,因爲你的意思是什麼「添加日期範圍」。我假設你想篩選出落在特定範圍內的結果:

SELECT vendor.Vendorid AS 'ID', vendor.name AS 'Name', Total 
FROM vendor 
LEFT JOIN (select sum (podetail.orderqty * podetail.unitcost) AS Total, podetail.VendorNum, podetail.Company 
    from podetail 
    where exists 
    (select 1 
    from poHeader 
    where poHeader.OrderNum = podetail.OrderNum and poHeader.ApprovalStatus = 'A') 
/*this line*/ and convert(varchar(8),poHeader.orderdate,112) between '20100101' and '201' 
    and exists 
    (select 1 from vendor 
    WHERE vendor.company = 'MyCompany' 
    and vendor.VendorNum = podetail.VendorNum 
    and vendor.Company = podetail.Company) 
    group by podetail.VendorNum, podetail.Company) OD 
    ON vendor.Vendornum = OD.Vendornum 
    and vendor.Company = OD.Company 
WHERE vendor.company = 'MyCompany' 
ORDER BY vendor.name 

我已經重新格式化爲便於閱讀。

我也轉換爲一個varchar(8),而指定範圍的參數可以是一個日期時間:

and poHeader.orderdate between getdate()-10 and getdate() 
0

它看起來像第一存在條款應作如下修改:

(select 1 from poHeader where poHeader.OrderNum = podetail.OrderNum and poHeader.ApprovalStatus = 'A' and poheader.orderdate BETWEEN 'start_date' AND 'end_date's)