2010-01-22 21 views
0

我有一個SQL表「ITM_SLS」具有以下字段:爲不同的日期範圍輸出兩個字段爲1字段?

ITEM 
DESCRIPTION 
TRANSACTION # 
DATE 
QTY SOLD 

我希望能夠拍出一個月的值輸出數量和年初至今的值,使得輸出應該是這樣的:

ITEM, DESCRIPTION, QTY SOLD MONTH, QTY SOLD YEAR TO DATE 

這可能嗎?

+0

依賴。你使用的是哪個數據庫? – womp 2010-01-22 16:53:28

+0

我使用SQL數據庫是否合理? – user256909 2010-01-22 16:57:02

+0

這絕對是Microsoft SQL Server。 – user256909 2010-01-22 17:01:15

回答

1

您可以使用子查詢中的group by來計算總銷售量。例如

select a.Item, a.Description, b.MonthQty, c.YearQty 
from (
    select distinct Item, Description from TheTable 
) a 
left join (
    select Item, sum(Qty) as MonthQty 
    from TheTable 
    where datediff(m,Date,getdate()) <= 1 
    group by Item 
) b on a.Item = b.Item 
left join (
    select Item, sum(Qty) as YearQty 
    from TheTable 
    where datediff(y,Date,getdate()) <= 1 
    group by Item 
) c on a.Item = c.Item 

限制子查詢一個特定的時間範圍的方法,每DBMS不同,該示例中使用SQL Server datediff功能。

+0

謝謝!我要去試試它... – user256909 2010-01-22 17:07:14

+0

再次感謝!我得到它的工作使用您的代碼模板,除了我使用 日期'date1'和'date2' 而不是datediff(這不適合我) 所以我只需要輸入我自己的日期值... – user256909 2010-01-22 23:45:24

0

這會給你的你可以做什麼的想法:

select 
    ITEM, 
    DESCRIPTION, 
    QTY SOLD as MONTH, 
    (select sum(QTY SOLD) 
     from ITM_SLS 
     where ITEM = I.ITEM 
     AND YEAR = i.YEAR 
    ) as YEAR TO DATE 
from ITM_SLS I 
1

假設 「一個月」 是上個月...

select item 
     , description 
     , sum (case when trunc(transaction_date, 'MM') 
          = trunc(add_months(sysdate, -1), 'MM') 
        then qty_sold 
        else 0 
        end) as sold_month 
     , sum(qty_sold) as sold_ytd 
from itm_sls 
where transaction_date >= trunc(sysdate, 'yyyy') 
group by item, description 
/
+0

好的查詢。小問題:如果你每月查詢一次,它會計算去年下半年對這個月的總數。 – Andomar 2010-01-22 17:03:59

+0

@Andomar。不明白你的意思。 WHERE子句可以清除比當前年份更早的任何事務。 – APC 2010-01-22 17:36:10

+0

啊正確,然後+1 :)原來的問題是爲SQL Server,所以truncate將無法正常工作,但'sum(case when' would – Andomar 2010-01-22 17:42:53

相關問題