0

トランザクション情報を調べるクエリを作成しました。期間基準は条件付きです。月の 5 日に、前月の 16 日から最後の日までを調べる必要があります。その月の 20 日に、同じ月の 1 日から 15 日を調べる必要があります。自動的に実行されます。Stack Overflow のすばらしい紳士または女性が、使用する次のストアド プロシージャを提供してくれました。これは完全に機能しました。

DECLARE @today SMALLDATETIME, @start SMALLDATETIME, @end SMALLDATETIME; 
SET @today = DATEADD(DAY, 0, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP));

SET @start = DATEADD(DAY, 1-DAY(@today), @today); 
SET @end = DATEADD(DAY, 15, @start);  

IF DATEPART(DAY, @today) <= 15 
BEGIN     
    SET @start = DATEADD(MONTH, -1, @end);     
    SET @end = DATEADD(DAY, 1-DAY(@today), @today); 
END   

SELECT ... WHERE h.billed_date >= @start AND h.billed_date < @end; 

現在、これをサードパーティのデータ統合ツールからアクセスできるビューに変換したいと考えています。Google によると、ビューは SQL Server のストアド プロシージャを呼び出せないとのことです。彼らの DBA は、クエリ全体をストアド プロシージャに変換することもできると述べました。データ統合ツールからアクセスできるように、クエリを SP に変換するにはどうすればよいですか? これは、クエリの簡略化されたバージョンです。

SELECT
  c.customer_name
, cc.category_name
, h.acct_bal  

FROM 
customer c
inner join htransactions h on c.customer_id = h.customer_id
left outer join customer_category cc on cc.category_id = c.category_id

WHERE
h.billed date >= @start
AND h.billed date < @end

ありがとう。私はビジネス アナリストで、SQL のスキルを向上させようとしています。私の基本的なクエリ SQL は強化されています。変数とストアド プロシージャについてさらに学習する必要があります。

4

1 に答える 1

1

これが単にストアド プロシージャである必要がある場合は、次のようになります。

CREATE PROCEDURE dbo.PullData -- whatever
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @today SMALLDATETIME, @start SMALLDATETIME, @end SMALLDATETIME; 

    SET @today = DATEADD(DAY, 0, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP));

    SET @start = DATEADD(DAY, 1-DAY(@today), @today); 
    SET @end = DATEADD(DAY, 15, @start);  

    IF DATEPART(DAY, @today) <= 15 
    BEGIN     
        SET @start = DATEADD(MONTH, -1, @end);     
        SET @end = DATEADD(DAY, 1-DAY(@today), @today); 
    END   

    SELECT ... WHERE h.billed_date >= @start AND h.billed_date < @end; 
END
GO
于 2012-06-04T16:04:48.177 に答える