2012-05-18 2 views
1

나는 만족스러운 결과를 얻기 위해 쿼리를 실행했지만 사용자가 결과에 대한 날짜 범위를 수동으로 입력하도록하는 코드를 삽입하도록 요청했습니다.SQL 날짜 삽입

내 코드 지금까지 IS .....

SELECT  vwREP_GP_ContractProjectPurchaseCostCatID.PACOSTCATID AS COST_CAT_CODE, 
      vwREP_GP_ContractProjectPurchaseCostCatID.PACOSTCATNME AS COST_CAT_NAME, 
      vwREP_GP_ContractProjectPurchaseRpt.COST, 
      vwREP_GP_ContractProjectPurchaseRpt.ITEMDESC AS ITEM, 
      vwREP_GP_ContractProjectPurchaseRpt.CREDITOR, 
      vwREP_GP_ContractProjectPurchaseRpt.DOC_NUM AS DOCUMENT_NUMBER, 
      vwREP_GP_ContractProjectPurchaseRpt.DESCRIPTION, 
      vwREP_GP_ContractProjectPurchaseRpt.DOC_DATE AS DATE, 
      vwREP_GP_ContractProjectPurchaseRpt.PROJECT AS JOB_CODE_STAGE, 
      vwREP_GP_ContractProjectPurchaseRpt.COMPOUNDNAME AS CATEGORY_DESCRIPTION 


FROM   vwREP_GP_ContractProjectPurchaseCostCatID INNER JOIN 
         vwREP_GP_ContractProjectPurchaseRpt ON vwREP_GP_ContractProjectPurchaseCostCatID.PACOSTCATID = vwREP_GP_ContractProjectPurchaseRpt.PACOSTCATID 


SELECT CATEGORY_DESCRIPTION, CAST(SUM(COST) AS DECIMAL(12, 2)) AS TOTAL_COST 

FROM ( 
     SELECT COMPOUNDNAME AS CATEGORY_DESCRIPTION, COST 
     FROM vwREP_GP_ContractProjectPurchaseRpt 
     ) A 
GROUP BY 
     CATEGORY_DESCRIPTION 

나는 코드 등의 문자열을 삽입하는 라인을 따라 생각하고 있었다 ....

SELECT * FROM vwREP_GP_ContractProjectPurchaseRpt 
WHERE (DOC_DATE >= @DateFrom) 
AND (DOC_DATE <= @DateTo) 

하지만 무엇입니까 이 일을하는 법을 고집했습니다.

모든 의견을 많이 주시면 감사하겠습니다.

모든 작업이 SQL Server Management Studio 2005에서 수행되며 결국 MS Visual Studio에 배포됩니다.

죄송합니다. 내 코드를 붙여 넣을 때 나는 이것을 놓쳤습니다. 나는 다음과 같은 내 varibles ...

DECLARE @DateFrom datetime 
DECLARE @DateTo datetime 

를 선언 한 다음 .....이했던 모든 빈 결과 창을 반환했다

SELECT * FROM vwREP_GP_ContractProjectPurchaseRpt 
WHERE (DOC_DATE >= @DateFrom) 
AND (DOC_DATE <= @DateTo) 

?

+0

그래서 무엇을 시도 했습니까? 왜 당신은 붙어 있습니까? 어떤면에서 문제가 발생합니까? –

+0

코드, XML 또는 데이터 샘플을 게시하는 경우 텍스트 편집기에서 해당 행을 강조 표시하고 편집기 툴바의 "코드 샘플"버튼 ('{}) '을 클릭하여 멋지게 형식을 지정하고 구문을 강조 표시하십시오! –

+0

쿼리에서 테이블 별칭을 사용하는 것이 좋습니다. 그러면 테이블 별칭을 훨씬 쉽게 읽을 수 있습니다. – Taryn

답변

3

문제에 대한 자세한 내용을 제공하지 않으므로 그 문제를 해결하려고 노력할 것입니다.

쿼리에 일종의 매개 변수 (날짜)를 전달하려면 저장 프로 시저를 사용해야합니다. 이것과 비슷한 것 :

CREATE PROCEDURE [dbo].[sp_test] 
(
    @DateFrom datetime, 
    @DateTo  datetime 
) 
AS 

SELECT * 
FROM vwREP_GP_ContractProjectPurchaseRpt 
WHERE DOC_DATE >= @DateFrom 
    AND DOC_DATE < DATEADD(DAY, 1, @DateTo) 

이렇게하면 DateTo와 DateFrom을 쿼리에 전달할 수 있습니다. 당신은 당신이 게시 당신의 두 번째 쿼리에 WHERE 절을 사용하려는 경우, 당신은 다음과 같습니다

exec dbo.test '5/1/12', '5/30/12' 
: 당신이 결과를 조회 할 갈 때 그런

CREATE PROCEDURE [dbo].[sp_test] 
(
    @DateFrom datetime, 
    @DateTo  datetime 
) 
AS 

SELECT CATEGORY_DESCRIPTION, CAST(SUM(COST) AS DECIMAL(12, 2)) AS TOTAL_COST 
FROM 
( 
    SELECT COMPOUNDNAME AS CATEGORY_DESCRIPTION, COST 
    FROM vwREP_GP_ContractProjectPurchaseRpt 
    WHERE DOC_DATE >= @DateFrom 
     AND DOC_DATE < DATEADD(DAY, 1, @DateTo) 
) A 
GROUP BY CATEGORY_DESCRIPTION 

을, 다음을 실행 것

0

선언시 변수는 NULL으로 초기화됩니다.

이 조건 :

WHERE (DOC_DATE >= @DateFrom) 
AND (DOC_DATE <= @DateTo) 

NULL로 설정 변수를 어떤 레코드를 보유하지 않습니다.

변수에 값을 지정하십시오.