Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Трябва да изберете данни от една таблица след минус с една стойност

Най-лесният начин да направите това е да използвате работещ агрегат. Във вашия оригинален пример имахте две таблици и ако случаят е такъв, просто изпълнете сума на тази таблица, както правя в подизбора, и запазете тази стойност в променливата, която създадох @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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Има ли някакъв начин за DISTINCT или групиране по текст (или ntext) в SQL Server 2005?

  2. Как да промените съпоставянето на база данни на SQL Server с помощта на T-SQL

  3. SET XACT_ABORT ON не работи в процедурата за създаване

  4. Масив за съхранение в SQL Server 2008

  5. Какъв е низът за sql връзка, който трябва да използвам за достъп до localhost\SQLEXPRESS с удостоверяване на Windows или SQL удостоверяване?