Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将1列数据分隔为2列_Sql_Sql Server 2008 - Fatal编程技术网

Sql 将1列数据分隔为2列

Sql 将1列数据分隔为2列,sql,sql-server-2008,Sql,Sql Server 2008,我的sql表中有以下数据: Tran_Date | Amount 2013-05-01 20:09:49 | 50.00 2013-05-02 04:09:49 | 50.00 2013-05-02 04:30:49 | 10.00 2013-05-02 20:09:49 | 500.00 2013-05-03 03:09:49 | 0.00 如何在上午5点之前将金额分为今天和第二天?结果应如下所示。获得结果的目的是因为商店早上8点开门,第二天早上5点关门。我

我的sql表中有以下数据:

 Tran_Date          |  Amount 
2013-05-01 20:09:49 |  50.00
2013-05-02 04:09:49 |  50.00
2013-05-02 04:30:49 |  10.00
2013-05-02 20:09:49 | 500.00
2013-05-03 03:09:49 |   0.00

如何在上午5点之前将金额分为今天和第二天?结果应如下所示。获得结果的目的是因为商店早上8点开门,第二天早上5点关门。我必须在上午8点到12点之前计算总和,在上午12点到5点之后计算总和,将其作为1天销售

    Tran_Date       |  Amount |  Amount_Before_5am
2013-05-01 20:09:49 |  50.00  |       60.00
2013-05-02 20:09:49 |  500.00 |        0.00
希望你们都能帮助我。我尝试了下面的代码将近一周,但什么也没有得到。有可能吗?谢谢

select CAST(DATEADD(hh, -5,c.TRAN_DATE) AS DATE),
       CAST(c.TRAN_DATE as DATE),
       sum(c.Amount)
from TRAN_TABLE 
group by CAST(DATEADD(hh, -5,c.TRAN_DATE) AS DATE),
         CAST(c.TRAN_DATE as DATE)

虽然您可以通过聚合来实现这一点,但另一种方法是使用
join

select tt.trandate, tt.amount, ttnext.amount
from Tran_table tt left outer join
     Tran_Table ttnext
     on hour(ttnext.tran_date) < 5 and
        cast(ttnext.tran_date as DATE) = CAST(tt.tran_date + 1 as DATE)
where hour(tt.tran_date) >= 5;
选择tt.trandate、tt.amount、ttnext.amount
从Tran_表tt左外连接
传输表ttnext
时间(ttnext.tran_日期)<5和
强制转换(ttnext.tran_date as date)=强制转换(tt.tran_date+1 as date)
式中,小时数(tt.tran_date)>=5;
这假设数据符合您在问题中的描述。同一天早上5点之前或早上5点之后的多个值将导致重复行。

选择传输日期
SELECT    Tran_Date
    , Amount
    , Amount_Before_5am = SUM(CASE WHEN CAST('Tran_Date' AS TIME) <'05:00:00' THEN Amount ELSE 0 END)
FROM TRAN_TABLE 
GROUP BY Tran_Date, Amount
数量
,Amount_Before_5am=SUM(CASE WHEN CAST('Tran_Date'作为时间)您可以使用聚合有效地完成此操作

选择BusinessDay=CAST(日期添加(hh,-5,TranDate)作为日期)
,金额=总和(当DATEPART(hh,TranDate)>4时,则金额=0结束)
,上午5点之前的金额=

总和(DATEPART(hh,TranDate)时的情况)你能解释一下你用来得到这个结果的逻辑吗?同时指出今天对你来说是什么意思。如果在上午5点之前有一笔金额,但前一天没有相应的金额呢?如果在上午5点之前或之后有多个记录呢?得到结果的目的是因为商店在上午8点开门,下一天关门第五天早上5点。我必须在上午8点到12点之前计算总和,在上午12点到5点之后计算总和,使之成为一天的销售。哇,这个答案非常有效。非常感谢,非常感谢!
SELECT BusinessDay = CAST(DATEADD(hh,-5,TranDate) AS DATE)
      ,Amount = SUM(CASE WHEN DATEPART(hh,TranDate) >  4 THEN Amount ELSE 0 END)
      ,Amount_Before_5am = 
       SUM(CASE WHEN DATEPART(hh,TranDate) <= 4 THEN Amount ELSE 0 END)
FROM Table
GROUP BY CAST(DATEADD(hh,-5,TranDate) AS DATE)