Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एक मान के साथ माइनस के बाद एक तालिका से डेटा का चयन करने की आवश्यकता है

ऐसा करने का सबसे आसान तरीका रनिंग एग्रीगेट का उपयोग करना होगा। आपके मूल उदाहरण में, आपके पास दो टेबल थे, और यदि ऐसा है, तो बस उस तालिका पर एक योग चलाएं जैसे मैं उप-चयन में कर रहा हूं और उस मान को वेरिएबल में संग्रहीत करता हूं जिसे मैंने @Sum बनाया है।

सीटीई गणना करता है कि प्रत्येक रिकॉर्ड के लिए एक साथ जोड़े जाने पर मूल्य क्या होगा, और फिर कुल गणना में जोड़ा जाता है, और फिर जो सकारात्मक होते हैं उन्हें रखता है।

मुझे विश्वास है कि यह आपकी आवश्यकता के अनुरूप होगा।

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. एक स्ट्रिंग में पहला गैर-संख्यात्मक वर्ण खोजने के लिए SQL

  2. त्रुटि:टीसीपी प्रदाता:त्रुटि कोड 0x2746। टर्मिनल के माध्यम से लिनक्स में एसक्यूएल सेटअप के दौरान

  3. एएसपीनेट में संग्रहीत प्रक्रिया से वापसी मूल्य प्राप्त करें

  4. सशर्त WHERE स्टेटमेंट SQL सर्वर

  5. SQL क्वेरी में इंडेक्स का उपयोग कैसे करें