2013-03-13 2 views
0
USE [MAS_CAN] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[spHistorybyCalenderYear]--create a stored proc 
@Year int = '2013' 
AS 
Begin 
SET NOCOUNT ON 
SELECT 
isnull(round(l.UnitPrice*l.QuantityShipped,2),0) as SalesAmount, 
isnull(round(l.unitCost*l.QuantityShipped,2),0) as CostAmount, 
(case 
when month(h.INVOICEDATE)=01 then '01' 
when month(h.INVOICEDATE)=02 then '02' 
when month(h.INVOICEDATE)=03 then '03' 
when month(h.INVOICEDATE)=04 then '04' 
when month(h.INVOICEDATE)=05 then '05' 
when month(h.INVOICEDATE)=06 then '06' 
when month(h.INVOICEDATE)=07 then '07' 
when month(h.INVOICEDATE)=08 then '08' 
when month(h.INVOICEDATE)=09 then '09' 
when month(h.INVOICEDATE)=10 then '10' 
when month(h.INVOICEDATE)=11 then '11' 
when month(h.INVOICEDATE)=12 then '12' 
END) as Period 
FROM AR_INVOICEHISTORYHEADER h join AR_INVOICEHISTORYDETAIL l on (h.INVOICENO = l.INVOICENO) 
Group by l.unitprice,l.unitcost,l.quantityShipped,h.invoicedate 
order by Period 
END 

Я хотел бы сгруппировать его по периоду ... Скажем, я хотел бы видетьПожалуйста, помогите мне с группой по п

Period SalesAmount CostAmount 
01  22   19 
02  24   25 

ответ

1

Используйте это:

GROUP BY l.unitprice, l.unitcost, l.quantityShipped, CAST(MONTH(h.invoicedate) as varchar) 

Кроме того, вы можете избавиться от этого крупного заявления о делах, если вы используете его на своем месте:

SELECT 
isnull(round(l.UnitPrice*l.QuantityShipped,2),0) as SalesAmount, 
isnull(round(l.unitCost*l.QuantityShipped,2),0) as CostAmount, 
CAST(MONTH(h.invoicedate) as varchar) as Period 
FROM ... 

Как уже упоминалось @Kaf, если вы хотите Period быть 0 проложенный вы можете использовать любой из них вместо прямого CAST:

right(100 + month(h.invoicedate),2) 
left(convert(varchar, h.invoicedate, 10), 2) 
+0

Вы можете использовать 'право (100 + месяц (h.invoicedate), 2), как Период', чтобы получить 'фронт 0' – Kaf

+0

@Kaf: Хорошо, я пропустил это. обновленный – PinnyM

Смежные вопросы