2013-04-24 47 views
1

之間我有以下查詢:日期的問題,由於在DATEDIFF函數

SELECT 
    datediff(d, 0, sauda_date), 
    Scrip_Code, 
    SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty ELSE 0 END) AS BuyQty, 
    SUM(CASE WHEN Buy_sell = 1 THEN Market_Rate ELSE 0 END) AS BuyRate, 
    SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty * Market_Rate ELSE 0 END) AS BuyAmount, 
    SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty ELSE 0 END) AS SellQty, 
    SUM(CASE WHEN Buy_sell = 2 THEN Market_Rate ELSE 0 END) AS SellRate, 
    (CASE WHEN SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty ELSE 0 END) > 
      SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty ELSE 0 END) THEN 'BF' 
     ELSE 'BT' END) as TradeType, 
    SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty * Market_Rate ELSE 0 END) AS SellAmount, 
    SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty ELSE 0 END) - 
    SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty ELSE 0 END) as NETQTY, 
    SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty * Market_Rate ELSE 0 END) - 
    SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty * Market_Rate ELSE 0 END)as NetAmt, 
    SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty * Market_Rate ELSE 0 END) - 
    SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty * Market_Rate ELSE 0 END) as PNLAmt 
FROM tradeFile 
where Inst_Type = 'FUTIDX' 
    OR Inst_Type='FUTSTK' 
    and Sauda_Date = convert(datetime,'1 Mar 2013') 
group by Scrip_Code, ExpiryDate, datediff(d,0,sauda_date) 

結果:

enter image description here

該查詢採取Buy_Qty的總和,Sell_Qty datewise [附。裁判這個任務:not able to get individual date in query result

但是,正如我們所看到DATEDIFF(d,0,sauda_date)列(即第一列)給了我一些結果,但我想在此結果中添加sauda_date作爲日期。

我應該在這個查詢中做出什麼改變。

我嘗試了通過添加查詢直接sauda_date但它給我的錯誤。

請指導我。

回答

1

如果您在查詢中使用GROUP BY然後(在T-SQL的情況下)在查詢的字段的一部分,你只能使用領域從GROUP BY或聚合函數(SUMCOUNT,....)。所以你不能只添加sauda_date。你應該添加它與聚合函數。例如MIN(sauda_date)。或者您可以將其添加到GROUP BY部分。

+0

我把它添加到GROUP BY子句和它的工作主要結合的結果。 – Freelancer 2013-04-24 07:40:52

1

不知道您的結果要求..

簡單地增加,如果你在組includ它的列表中,我已經嘗試過belwo及其工作sauda_date在選擇列表中不應該給錯誤。

Select datediff(d,0,f.Date), 
     sum(f.price), 
     f.OrderID, 
     f.Date 
from test f 
group by f.Date,OrderID,datediff(d,0,f.Date) 

否則 您可以使用自連接得到的只有賽於達更新你的鍵列