2013-04-04 45 views
-1

我射擊以下查詢>>unble由日化集團在我的查詢

SELECT sauda_date, 
    Sum(CASE 
     WHEN buy_sell = 1 
       AND scrip_code = 'ADANIENT' 
       AND sauda_date BETWEEN CONVERT(DATETIME, '1 Mar 2013') AND 
            CONVERT(DATETIME, '1 Apr 2013') THEN 
     trade_qty 
     ELSE 0 
     END)   AS BuyQty, 
    Sum(CASE 
     WHEN buy_sell = 2 
       AND scrip_code = 'ADANIENT' 
       AND sauda_date BETWEEN CONVERT(DATETIME, '1 Mar 2013') AND 
            CONVERT(DATETIME, '1 Apr 2013') THEN 
     trade_qty 
     ELSE 0 
     END)   AS SellQty, 
    Sum(CASE 
     WHEN buy_sell = 1 
       AND scrip_code = 'ADANIENT' THEN trade_qty 
     ELSE 0 
     END) - Sum(CASE 
        WHEN buy_sell = 2 
         AND scrip_code = 'ADANIENT' THEN trade_qty 
        ELSE 0 
        END) AS CarryForword 
FROM tradefile 
WHERE scrip_code = 'ADANIENT' 
GROUP BY sauda_date 

和我得到以下結果:

sauda_date | Buy_Qty | SellQty | CarryForward 

    01 Mar 2013  2000  0   2000 
    01 Mar 2013  0  2000   0 
    01 Mar 2013  4000  0   4000 
    02 Mar 2013  0  1000  3000 
    02 Mar 2013  2000  0  5000 
    03 Mar 2013  0  4000  1000 

但我希望它是:

sauda_date | Buy_Qty | SellQty | CarryForward 

    01 Mar 2013  6000  2000  4000 
    02 Mar 2013  2000  1000  5000 
    03 Mar 2013  0  4000  1000 

我們可以從表中看到:

CaryyForward=Buy_Qty-Sell_Qty; 

01 Mar 2013 is date and Buy_Qty=sum(buy_Qty) for 01 Mar 2013. 
02 Mar 2013 is date and Buy_Qty=sum(buy_Qty) for 02 Mar 2013. 

[與Sell_Qty和CarryForward相同]。

我以不同的羣試圖通過時的情況下,但才知道,它不是在當情況允許的。

我也用不同的地方條件但不工作的嘗試。

請幫幫我。

+0

爲什麼downvote ??? – Freelancer 2013-04-04 09:58:38

回答

1

把查詢在子查詢,如

SELECT sauda_date , 
     MAX(Buy_Qty) Buy_Qty, 
     MAX(SellQty) SellQty, 
     MAX(CarryForward) CarryForward 
FROM 
     (
      -- ...put your current query here ... 
     ) x 
GROUP BY sauda_date 
+0

我的整個上面的查詢在()之後從??? – Freelancer 2013-04-04 06:40:46

+0

錯誤:關鍵字'GROUP'附近的語法不正確。 – Freelancer 2013-04-04 06:42:48

+0

是將所有查詢放在'(...)' – 2013-04-04 06:44:08

0

您可以通過子句與一個以上的參數使用組。需要注意的一塊,我已經添加到您的代碼的末尾:

select sauda_date, 
      SUM(CASE WHEN Buy_sell = 1 
         and scrip_code='ADANIENT' 
         and Sauda_Date between convert(datetime,'1 Mar 2013') 
             and convert(datetime,'1 Apr 2013') 
        THEN Trade_Qty ELSE 0 END) AS BuyQty, 
      SUM(CASE WHEN Buy_sell = 2 
         and scrip_code='ADANIENT' 
         and Sauda_Date between convert(datetime,'1 Mar 2013') 
             and convert(datetime,'1 Apr 2013') 
        THEN Trade_Qty ELSE 0 END) AS SellQty , 
      SUM(CASE WHEN Buy_sell = 1 
         and scrip_code='ADANIENT' 
        THEN Trade_Qty ELSE 0 END) 
       - SUM(CASE WHEN Buy_sell = 2 
           and scrip_code='ADANIENT' 
         THEN Trade_Qty ELSE 0 END) AS CarryForword 
from tradefile 
where scrip_code='ADANIENT' 
group by sauda_date, Buy_Qty, SellQty, CarryForward 

這是否不會崩潰總計爲你?

+0

nope,它不允許我在組中有多個列 – Freelancer 2013-04-04 06:45:58

+0

不,這不對。仍然錯誤:消息207,級別16,狀態1,行21 無效的列名稱'Buy_Qty'。 消息207,級別16,狀態1,行21 無效的列名稱'SellQty'。 消息207,級別16,狀態1,行21 無效的列名稱'CarryForward'。 – Freelancer 2013-04-04 07:01:01

0

嘗試:

GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, sauda_date)) 

沒有讓您的樣本數據我不能肯定,但看起來你對錶中的每一行的不同時間部分。 分組的日期時間將2013-04-04 08:24:13.7902013-04-04 17:24:13.790例如之間的差異。以上查詢將首先轉換爲2013-04-04 00:00:00.000

編輯:你也有同樣的結構,以取代sauda_date SELECT列表中。

SQLFiddle DEMO

0

我的數據庫也具有連接到它的時間。 所以由於不同的時間,它採取不同的日期。

所以我寫的查詢爲:

select CONVERT(VARCHAR(11),sauda_date) AS sauda_date,SUM(CASE WHEN Buy_sell = 1 and scrip_code='ADANIENT' and Sauda_Date between convert(datetime,'1 Mar 2013') and convert(datetime,'1 Apr 2013') THEN Trade_Qty ELSE 0 END) AS BuyQty,SUM(CASE WHEN Buy_sell = 2 and scrip_code='ADANIENT' and Sauda_Date between convert(datetime,'1 Mar 2013') and convert(datetime,'1 Apr 2013') THEN Trade_Qty ELSE 0 END) AS SellQty ,  SUM(CASE WHEN Buy_sell = 1 and scrip_code='ADANIENT' THEN Trade_Qty ELSE 0 END) -SUM(CASE WHEN Buy_sell = 2 and scrip_code='ADANIENT' THEN Trade_Qty ELSE 0 END) AS CarryForword from tradefile where scrip_code='ADANIENT' group by CONVERT(VARCHAR(11),sauda_date) 

和這個工作。