2013-04-08 80 views
-1

随着我已经使用堆栈的回答以下查询之一:按日期场时的数据类型为nvarchar的

select 
    AVG(CASE WHEN Buy_sell = 1 and scrip_code='" + ds.Tables[0].Rows[i][2].ToString() + "' and Sauda_Date between convert(datetime,'" + dtpForDate.Value.Date.ToString("dd/MM/yyyy") + "') and convert(datetime,'" + dtpToDate.Value.Date.ToString("dd/MM/yyyy") + "') THEN Market_Rate ELSE 0 END) AS AVGBuyRate , 
    AVG(CASE WHEN Buy_sell = 2 THEN Market_Rate ELSE 0 END) AS AVGSellRate, 
    CONVERT(VARCHAR(11),sauda_date) AS sauda_date, 
    SUM(CASE WHEN Buy_sell = 1 and scrip_code='" + ds.Tables[0].Rows[i][2].ToString() + "' and Sauda_Date between convert(datetime,'" + dtpForDate.Value.Date.ToString("dd/MM/yyyy") + "') and convert(datetime,'" + dtpToDate.Value.Date.ToString("dd/MM/yyyy") + "') THEN Trade_Qty ELSE 0 END) AS BuyQty, 
    SUM(CASE WHEN Buy_sell = 2 and scrip_code='" + ds.Tables[0].Rows[i][2].ToString() + "' and Sauda_Date between convert(datetime,'" + dtpForDate.Value.Date.ToString("dd/MM/yyyy") + "') and convert(datetime,'" + dtpToDate.Value.Date.ToString("dd/MM/yyyy") + "') THEN Trade_Qty ELSE 0 END) AS SellQty ,  
    SUM(CASE WHEN Buy_sell = 1 and scrip_code='" + ds.Tables[0].Rows[i][2].ToString() + "' THEN Trade_Qty ELSE 0 END) -SUM(CASE WHEN Buy_sell = 2 and scrip_code='" + ds.Tables[0].Rows[i][2].ToString() + "' THEN Trade_Qty ELSE 0 END) AS CarryForword 
from tradefile 
where scrip_code='" + ds.Tables[0].Rows[i][2].ToString() + "' 
    and INST_TYPE LIKE 'FUT%' 
group by CONVERT(VARCHAR(11),sauda_date) order by CONVERT(VARCHAR(11),sauda_date) desc 

该查询给我下面的输出:

enter image description here

在此,如果我们来看看sauda_date柱,后2013年2月28日被责令由2013年3月22日,则2013年3月21日再二零一三年三月二十零日等

但它应该是2013年2月28日, 2013年3月1日,2013年3月2日... ...,2013年3月20日,2013年3月21日,3月22日2013年

我应该在查询什么样的变化?

注: sauda_date类型为nvarchar类型的

新的查询:

select AVG(CASE WHEN Buy_sell = 1 and scrip_code='" + ds.Tables[0].Rows[i][2].ToString() + "' and Sauda_Date between convert(datetime,'" + dtpForDate.Value.Date.ToString("dd/MM/yyyy") + "') and convert(datetime,'" + dtpToDate.Value.Date.ToString("dd/MM/yyyy") + "') THEN Market_Rate ELSE 0 END) AS AVGBuyRate , AVG(CASE WHEN Buy_sell = 2 THEN Market_Rate ELSE 0 END) AS AVGSellRate, CONVERT(VARCHAR, CONVERT(DATETIME, sauda_date, 106), 106) as Sauda_Date,SUM(CASE WHEN Buy_sell = 1 and scrip_code='" + ds.Tables[0].Rows[i][2].ToString() + "' and Sauda_Date between convert(datetime,'" + dtpForDate.Value.Date.ToString("dd/MM/yyyy") + "') and convert(datetime,'" + dtpToDate.Value.Date.ToString("dd/MM/yyyy") + "') THEN Trade_Qty ELSE 0 END) AS BuyQty,SUM(CASE WHEN Buy_sell = 2 and scrip_code='" + ds.Tables[0].Rows[i][2].ToString() + "' and Sauda_Date between convert(datetime,'" + dtpForDate.Value.Date.ToString("dd/MM/yyyy") + "',106) and convert(datetime,'" + dtpToDate.Value.Date.ToString("dd/MM/yyyy") + "',106) THEN Trade_Qty ELSE 0 END) AS SellQty ,  SUM(CASE WHEN Buy_sell = 1 and scrip_code='" + ds.Tables[0].Rows[i][2].ToString() + "' THEN Trade_Qty ELSE 0 END) -SUM(CASE WHEN Buy_sell = 2 and scrip_code='" + ds.Tables[0].Rows[i][2].ToString() + "' THEN Trade_Qty ELSE 0 END) AS CarryForword from tradefile where scrip_code='" + ds.Tables[0].Rows[i][2].ToString() + "' and INST_TYPE LIKE 'FUT%' group by convert(datetime,sauda_date,106) order by convert(datetime,sauda_date,106) desc 

回答

1

更改最后一行:

select 
    ...., 
    CONVERT(VARCHAR, CONVERT(DATETIME, sauda_date, 106), 106) 
... 
group by CONVERT(VARCHAR, CONVERT(DATETIME, sauda_date, 106), 106) 
order by CONVERT(DATETIME, sauda_date, 106) asc 

而且需要最低的日期,那我相信你需要一个asc而不是desc

+0

sauda_date是为nvarchar – Freelancer 2013-04-08 11:55:00

+0

看到我的更新。简单地将其转换为'datetime'。 – 2013-04-08 12:01:07

+0

列'tradefile.Sauda_Date'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。 – Freelancer 2013-04-08 12:03:42

4

你转换日期为文本排序,所以你得到的文本秩序。 “F”在“M”之前。不知道模式我会说:尝试从ORDER BY条款中删除CONVERT...呼叫。

而且似乎你想要ASC秩序,不DESC

编辑:你说sauda_date是nvarchar类型。我会说,要么它不应该(使用适当的日期类型的存储),或者你必须将其转换回日期时间进行排序。

+0

我sauda_date是为nvarchar,和2013年2月28日至上多数民众赞成确定,但以后的日子该序列应该从2013年3月1日,但其出发,从2013年3月22日,2013年3月21日 – Freelancer 2013-04-08 11:51:31

+0

转换(日期时间,sauda_date)开始是阿洛斯不工作 – Freelancer 2013-04-08 11:58:45

相关问题