2012-06-28 69 views
0

动态生成的插入或Select语句可以说我有一个表,以下数据SQL - 基于某种条件

Customer表:

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的值,如果追加INVOICE_NUMBER date_created在当前季度内。

  • 显然我需要知道当前季度的开始和结束日期,并且需要在比较之前将它们存储在某处。纯粹的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兼容。

回答

1

甲骨文语法做什么你在两颗子弹点说明会

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; 
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; 
+0

对不起,这是SQL语法,但它不应该很难将这些功能转换为Oracle :)你明白了。 – Mangist

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