sql >> データベース >  >> RDS >> Sqlserver

1 つの値を持つマイナスの後に 1 つのテーブルからデータを選択する必要があります

    これを行う最も簡単な方法は、実行中の集計を使用することです。元の例では、2 つのテーブルがありました。この場合は、サブセレクトで行っているようにそのテーブルで合計を実行し、その値を作成した変数 @Sum に格納します。

    CTE は、レコードごとに合計された値を計算し、計算された合計に追加して、正の値を保持します。

    これはあなたのニーズに合うと思います。

    DECLARE @Sum INT;
    SET @Sum = 800;
    
    WITH    RunningTotals
              AS (
                   SELECT   [SNo]
                          , [Amount]
                          , [Amount] + (
                                         SELECT ISNULL(SUM([Amount]), 0)
                                         FROM   [Table1] t2
                                         WHERE  t2.[SNo] < t.SNo
                                       ) [sums]
                   FROM     [Table1] t
        ),
        option_sums
          AS (
               SELECT   ROW_NUMBER() OVER ( ORDER BY [SNo] ) [SNo]
                      , CASE WHEN ( [Sums] - @Sum ) > 0 THEN [Sums] - @Sum
                             ELSE [Amount]
                        END AS [Amount]
                      , sums
                      , [Amount] [OriginalAmount]
                      , [OriginalID] = [SNo]
               FROM     [RunningTotals] rt
               WHERE    ( [Sums] - @Sum ) > 0
             )
     SELECT [SNo]
          , CASE [SNo]
              WHEN 1 THEN [Amount]
              ELSE [OriginalAmount]
            END AS [Amount]
          , [OriginalID]
     FROM   option_sums 
    
    SNo Amount  OriginalID
    --- ------  ----------
    1   200     3
    2   100     4
    3   100     5
    4   500     6
    5   400     7
    6   100     8
    7   200     9
    



    1. スレッディングと SqlFileStream。別のトランザクションで開かれているため、プロセスは指定されたファイルにアクセスできません

    2. トランザクション中に読み取り専用の休止状態セッションを書き込みに変換する方法(マスター/スレーブDB)

    3. 複数のテーブル oracle に SELECT を付与する

    4. PL / MySQLは存在しますか?