1

クエリを実行して満足のいく特定の結果を取得しましたが、ユーザーに結果の日付範囲を手動で入力させるコードを挿入する必要があります。

これまでの私のコードは.....

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 に展開される予定です。

申し訳ありませんが、コードを貼り付けるときにこれを見逃していました。私はこのように変数を宣言しました...

DECLARE @DateFrom datetime 
DECLARE @DateTo datetime

それから次の.....

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

空白の結果ペインが返されただけですか?

4

2 に答える 2

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 をクエリに渡すことができます。次に、投稿した 2 番目のクエリで WHERE 句を使用する場合は、次のようにします。

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

次に、結果をクエリする場合は、次のように実行します。

exec dbo.test '5/1/12', '5/30/12'
于 2012-05-18T15:03:24.917 に答える
0

宣言すると、変数は に初期化されNULLます。

この条件:

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

変数が に設定されているレコードは保持されませんNULL

いくつかの値を変数に割り当てます。

于 2012-05-18T15:03:01.710 に答える