Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Musisz wybrać dane z jednej tabeli po minus z jedną wartością

Najprostszym sposobem na to byłoby użycie działającego agregatu. W oryginalnym przykładzie miałeś dwie tabele, a jeśli tak jest, po prostu uruchom sumę na tej tabeli, tak jak robię to w podselekcji, i zapisz tę wartość w utworzonej przeze mnie zmiennej @Sum.

CTE oblicza, jaka byłaby wartość, gdy jest sumowana dla każdego rekordu, a następnie jest dodawana do obliczonej sumy, a następnie zachowuje te, które są dodatnie.

Wierzę, że to zaspokoi Twoje potrzeby.

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. Wstaw datę i godzinę w SQL bez milisekund za pomocą parametru

  2. 3-cyfrowy kod waluty do symbolu waluty

  3. Jaka jest różnica między tymi dwoma zapytaniami, jeśli chodzi o uzyskiwanie dwóch różnych zestawów wyników?

  4. Pokaż przecinek zamiast kropki jako separator dziesiętny

  5. Jak policzyć 2 różne dane w jednym zapytaniu?