这是DDL -
create table tbl1 (
id number,
value varchar2(50)
);
insert into tbl1 values (1, 'AA, UT, BT, SK, SX');
insert into tbl1 values (2, 'AA, UT, SX');
insert into tbl1 values (3, 'UT, SK, SX, ZF');
Run Code Online (Sandbox Code Playgroud)
注意,这里的值是逗号分隔的字符串.
但是,我们需要结果如下 -
ID VALUE
-------------
1 AA
1 UT
1 BT
1 SK
1 SX
2 AA
2 UT
2 SX
3 UT
3 SK
3 SX
3 ZF
Run Code Online (Sandbox Code Playgroud)
我们如何为此编写SQL?
我需要汇总Amounts
以按每月的日期范围显示。为了说明这一点,请看下表:
发票支付
Customer_id Invoice_no Invoice_date Amount
---------------------------------------------------
10 10023 2016-07-08 60
10 10018 2016-08-04 90
11 10016 2016-07-01 110
11 10021 2016-07-05 120
12 10028 2016-07-11 10
12 10038 2016-07-31 5
Run Code Online (Sandbox Code Playgroud)
您会注意到,我想根据Customer_id
从开始到结束的日期对它们进行分组并显示。此外,只需每月执行此操作。
到目前为止我已经尝试过以下查询:
select Customer_id, (mindate + ' to ' + maxdate) Date_Range, Amount
from (
select Customer_id, sum(Amount) Amount, min(Invoice_date) mindate, max(Invoice_date) maxdate
from Invoice_Payment
group by Customer_id
) I ;
Run Code Online (Sandbox Code Playgroud)
从上面的查询我得到的Output
结果是:
Customer_id Date_Range Amount
10 2016-07-08 to 2016-08-04 150
11 2016-07-01 to …
Run Code Online (Sandbox Code Playgroud) 我将开始日期和结束日期参数传递给我的存储过程.我在这里做一个简单的测试:
DECLARE @StartDate DATE = '10/06/2013' --dd/mm/yyyy
SELECT @StartDate -- this statement running successfully
DECLARE @EndDate DATE = '30/06/2013' --dd/mm/yyyy
SELECT @EndDate -- this statement giving error
Run Code Online (Sandbox Code Playgroud)
此语句返回以下错误
消息241,级别16,状态1,行2
转换在从字符串转换日期和/或时间时失败.
有谁知道出了什么问题EndDate
?