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

दिनांक-आदेशित सूची से पिछले गैर-शून्य मान ढूँढना

यहां आपकी नमूना तालिका है

SELECT * INTO #TEMP
FROM
(
SELECT 'Item1' [Item Name],      '01/01/2013' [Date], 10.00 [Price]
UNION ALL
SELECT 'Item1',      '02/01/2013', 9.50
UNION ALL
SELECT 'Item1',      '03/01/2013', 0
UNION ALL
SELECT 'Item1',      '04/01/2013', 7.50
UNION ALL
SELECT 'Item1',     '05/01/2013', 0.00
UNION ALL
SELECT 'Item1',     '06/01/2013', 0.00
UNION ALL
SELECT 'Item1',     '07/01/2013', 11.00
UNION ALL
SELECT 'Item2',      '01/01/2013', 0.00
UNION ALL
SELECT 'Item2',     '02/01/2013', 12.00
UNION ALL
SELECT 'Item2',      '03/01/2013', 0.00
UNION ALL
SELECT 'Item2',      '04/01/2013', 0.00
UNION ALL
SELECT 'Item2',     '05/01/2013', 13.00
)TAB

और परिणाम क्वेरी

 SELECT [Item Name],[Date],
CASE WHEN [Price]=0 THEN 
    ISNULL((SELECT TOP 1 [Price]
     FROM #TEMP T2 
     WHERE CAST(T2.[Date] AS DATE)<T1.[Date] AND T1.[Item Name]=T2.[Item Name] AND T2.[Price]>0
     ORDER BY CAST(T2.[Date] AS DATE) DESC),0) 
    ELSE [Price] END [Price]
FROM #TEMP T1

आपका परिणाम यहाँ है

यहां काम कर रही फिडल है http://sqlfiddle.com/#!3/afabd/1 (यदि यह पृष्ठ लोड करने में कोई त्रुटि दिखाता है, तो RUNSQL दबाएं, यह काम करेगा)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MSSQL में सभी तालिकाओं, विचारों और संग्रहीत कार्यविधियों का स्कीमा कैसे बदलें

  2. नाम से संग्रहीत प्रक्रियाओं को कैसे खोजें?

  3. जटिल प्रकार के साथ इकाई की रूपरेखा 5 में संग्रहीत कार्यविधि का उपयोग करना?

  4. SqlServer कथन का चयन क्यों करेगा उन पंक्तियों का चयन करें जो मेल खाती हैं और पंक्तियाँ जो मेल खाती हैं और जिनमें अनुगामी स्थान हैं

  5. SQL सर्वर में नेस्टेड चयन कथन