2017-09-13 12 views
1

こんにちは私はSSRS でレポートのデータセットに取り組んでいると私は、バックログの総要求与えクエリがあります。のSQL Server 2014を選択し、合計

SELECT 
COUNT(*) as NB 
FROM p_rqt WITH (NOLOCK) 
INNER JOIN p_cpy WITH (NOLOCK) ON p_cpy.CpyInCde = p_rqt.OrigCpyInCde 
WHERE 
    CpyTypInCde IN (27, 31) 
    AND p_rqt.RqtNatInCde IN (74, 75, 76) 
    AND HeadRqtInCde = 0 
    AND p_rqt.OrigCpyInCde LIKE CASE WHEN @Client = 0 THEN '%' ELSE @Client END 
    AND ((RcvDte < DATEADD(day, 1, @DateDeb) AND RqtEndDte IS NULL) OR 
(RcvDte < DATEADD(day, 1, @DateDeb) AND RqtEndDte > DATEADD(day, 1, @DateDeb))) 

をし、私が取得したいです1日に残された合計金額。 私はこのような多くのことを試してみました:

SELECT CONVERT(date,rcvdte,103), count(*) as nb 
FROM p_rqt p WITH (NOLOCK) 
INNER JOIN p_cpy WITH (NOLOCK) ON p_cpy.CpyInCde = p.OrigCpyInCde 
WHERE 
    CpyTypInCde IN (27, 31) 
    AND p.RqtNatInCde IN (74, 75, 76) 
    AND HeadRqtInCde = 0 
    AND ((RcvDte < DATEADD(day, 1, '20170901') AND RqtEndDte IS NULL) OR (RcvDte < DATEADD(day, 1, '20170901') AND RqtEndDte > DATEADD(day, 1, '20170901'))) 
    group by CONVERT(date,rcvdte,103) 
    order by CONVERT(date,rcvdte,103) 

私は、内側のサブクエリ、合計や他のもの に参加するが、私はやって管理することができ、すべてが一日 あたりに追加されたレコードの数を持つことであると私はのような何かをしたいしようとしましたこの:

date:    NB: 
01/01/2017  1950 
02/01/2017  1954    (+4 items) 
03/01/2017  1945    (-9 items) 

+1

我々はに対してクエリを実行できるサンプルデータは、有用このを見てみましょう:のhttp:// www.sqlservercentral.com/blogs/spaghettidba/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ – Tanner

+0

SSRS内で計算を行い、クエリを保存することをお勧めします可能な限り最小限の(そして速い)ものとして。 SSRSの内部では、累計にRunningValueを使用することができます。https://stackoverflow.com/questions/16462826/how-to-i-get-cumulative-monthly-subtotals-in-ssrs – niktrs

+0

私はしたいですが、それはのようなデザインですこれは複数のUNIONを持つテーブルで、別の方法でそれをやりたがりません – wololo

答えて

0

だから私はまだ答えを投稿私は解決策を見つけたが、それは本当に遅いです、 とにかく

  DECLARE @Tb TABLE ( Colonne1 Datetime, Colonne2 INT) 
DECLARE @Debut Datetime = '01/09/2017' 
WHILE @Debut < '13/09/2017' 
BEGIN 
    DECLARE @Compteur int = (
     SELECT 
       COUNT(1) NB 
       FROM p_rqt WITH (NOLOCK) 
       INNER JOIN p_cpy WITH (NOLOCK) ON p_cpy.CpyInCde = p_rqt.OrigCpyInCde 
       WHERE 
         CpyTypInCde IN (27, 31) 
         AND p_rqt.RqtNatInCde IN (74, 75, 76) 
         AND HeadRqtInCde = 0 
         AND p_rqt.OrigCpyInCde LIKE '%' 
         AND (
           (RcvDte < @Debut AND RqtEndDte IS NULL) 
           OR 
           (RcvDte < @Debut AND RqtEndDte > @Debut) 
         ) 
    ) 
    INSERT INTO @Tb (Colonne1, Colonne2) VALUES (@Debut, @Compteur) 
    SET @Debut = DATEADD(day, 1, @Debut) 
    IF @Debut > '13/09/2017' 
    BREAK 
    ELSE 
    CONTINUE 
    END 
    SELECT * FROM @Tb 
0

使用LAGありがとう:

WITH cte AS (
    SELECT 
     CONVERT(date, rcvdte, 103) AS date, 
     COUNT(*) AS nb 
    FROM p_rqt p WITH (NOLOCK) 
    INNER JOIN p_cpy WITH (NOLOCK) 
     ON p_cpy.CpyInCde = p.OrigCpyInCde 
    WHERE 
     CpyTypInCde IN (27, 31) AND 
     p.RqtNatInCde IN (74, 75, 76) AND 
     HeadRqtInCde = 0 AND 
     ((RcvDte < DATEADD(day, 1, '20170901') AND RqtEndDte IS NULL) OR (RcvDte < DATEADD(day, 1, '20170901') AND RqtEndDte > DATEADD(day, 1, '20170901'))) 
    GROUP BY CONVERT(date, rcvdte, 103) 
    ORDER BY CONVERT(date, rcvdte, 103) 
) 

SELECT 
    t1.date, 
    (SELECT SUM(t2.nb) FROM cte t2 WHERE t2.date <= t1.date) AS nb, 
    CASE WHEN t1.nb - LAG(t1.nb, 1, t1.nb) OVER (ORDER BY t1.date) > 0 
     THEN '(+' + (t1.nb - LAG(t1.nb, 1, t1.nb) OVER (ORDER BY t1.date)) + ' items)' 
     ELSE '(' + (t1.nb - LAG(t1.nb, 1, t1.nb) OVER (ORDER BY t1.date)) + ' items)' 
    END AS difference 
FROM cte t1 
ORDER BY t1.date; 
+0

それは別の部分とは別に動作しませんでした まだ1日に追加されたレコードの数があります= – wololo