sql >> Databáze >  >> RDS >> Sqlserver

Nalezení předchozí nenulové hodnoty ze seznamu seřazeného podle data

Zde je ukázková tabulka

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

A dotaz na výsledek

 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

Váš výsledek je zde

Zde je funkční housle http://sqlfiddle.com/#!3/afabd/1 (Pokud zobrazuje nějakou chybu při načítání stránky, stiskněte RUNSQL, bude to fungovat)




  1. Předávání datové tabulky z C# na SQL Server 2008

  2. Jak definovat funkci pl sql s dynamickými typy návratů v Oracle?

  3. Znovu povolte doplněk SSMS

  4. Jak získat seznam všech kontrolních omezení v databázi SQL Server - SQL Server / TSQL výukový program, část 85