0

假设我有一张包含以下数据的表格

客户表:

Name      amount    date_created    invoice_number
--------------------------------------------------
John     50         11April2012          12
Bob      150        15April2012          32
David    506        10May2012            52
Paul     80         12Aug2012            12
Mark     10         11Jan2012            52

汇总表:

Name        amount  
---------------------
Sally       250 
Darren-32   150 

我想选择 date_created 在 current_quarter 的 start_date 和 end_date 之间的所有行。如果 date_created 在当前季度内,我想在执行插入语句之前将 invoice_number 附加到名称(参见上面汇总表中的示例)。

INSERT summary(name, amount)
SELECT name|| '-' || invoice_number, date_created, invoice_number
From Customer;
  • 我如何修改上述内容以使用“解码”函数或“案例”函数(或任何其他“IF 语句”类型函数)来检查 date_created 的值,如果 date_created 在当前季度内,则附加 invoice_number。

  • 显然,我需要知道当前季度的开始和结束日期,并且需要在进行比较之前将它们存储在某个地方。纯 SQL 有可能吗?PL/SQL 不是一个选项。

假设我们在第一季度(4 月 - 6 月),最终结果应该是:

Name        amount  
---------------------
Sally       250 
Darren-32   150
John-12     50
Bob-32      150
David-52    506
Paul        80
Mark        10

我正在从 Oracle 10G 数据库中读取客户表并将摘要填充到驻留在 SQL 服务器数据库中的“摘要”表中。我插入 SQL Server 数据库的事实并不重要。我正在从 Oracle 数据库中读取数据,因此语法应该与 Oracle 兼容。

4

3 回答 3

1
declare @CurrentQtr int
set @CurrentQty = CASE
  WHEN datepart(month, getdate()) in (1,2,3) THEN 1
  WHEN datepart(month, getdate()) in (4,5,6) THEN 2
  WHEN datepart(month, getdate()) in (7,8,9) THEN 3
  ELSE 4 END

SELECT name + case 
  WHEN datepart(month, date_created) in (1,2,3) AND @CurrentQtr = 1 THEN '-' + invoice_number 
  WHEN datepart(month, date_created) in (4,5,6) AND @CurrentQtr = 2 THEN '-' + invoice_number 
  WHEN datepart(month, date_created) in (7,8,9) AND @CurrentQtr = 3 THEN '-' + invoice_number 
  WHEN datepart(month, date_created) in (10,11,12) AND @CurrentQtr = 4 THEN '-' + invoice_number 
  ELSE '' end as Name, amount
From Customer;
于 2012-06-28T18:02:00.383 回答
1

执行您在两个要点中描述的 Oracle 语法将是

SELECT (CASE WHEN     date_created >= trunc(sysdate,'Q') 
                  AND date_created < trunc(add_months(sysdate,3),'Q')
             THEN name || '-' || invoice_number
             ELSE name
         END),
       date_created, 
       invoice_number
  FROM Customer;
于 2012-06-28T18:06:04.307 回答
1

像这样的东西?

 insert summary
 Select 
     Name || case 
         when datepart(dp_quarter, sysdate)=datepart(dp_quarter, date_Created)
   and extract(year from sysdate) = extract(year from date_Created) 
         then '-' || invoice_number
         else '' end,
 amount from Customer
于 2012-06-28T18:12:35.390 回答