CURSOR
이 시점에서, 성능 단점이 있지만 그것의 더 나은 당신은 당신이 필요 다른 CURSOR
사용할 수 있습니다 각 레코드에 대해 NOT NULL
값을 확인하십시오. 이것을 사용하는 동안 변수에 마지막으로 NOT NULL
값을 유지할 수 있습니다.
참고 : 귀하의 데이터베이스가 SQL SERVER
이 되길 바래요.
SAMPLE 표
CREATE TABLE #TEMP(Sale_Dates DATE,MAKE VARCHAR(30),Sale_Price NUMERIC(18,2),[YEAR] INT,[COLOR] VARCHAR(20))
INSERT INTO #TEMP
SELECT '2015-01-01' , 'Ford' , 20000.00 ,2012 , 'Blue'
UNION ALL
SELECT '2015-01-02' , NULL , NULL ,NULL , NULL
UNION ALL
SELECT '2015-01-03' , NULL , NULL ,NULL , NULL
UNION ALL
SELECT '2015-01-04' , 'Maruti' , 30000.00 ,NULL , NULL
UNION ALL
SELECT '2015-01-05' , NULL , NULL ,NULL , NULL
QUERY 당신이 코멘트에 row_number
을 언급 한 이후
DECLARE @Sale_Dates DATE
DECLARE @MAKE VARCHAR(30)
DECLARE @Sale_Price NUMERIC(20,2)=0
DECLARE @Previous_MAKE VARCHAR(30)
DECLARE @Previous_Sale_Price NUMERIC(20,2)=0
-- Here you declare which all columns you need to loop in Cursor
DECLARE CUR CURSOR FOR
SELECT Sale_Dates,MAKE,Sale_Price
FROM #TEMP
ORDER BY Sale_Dates;
OPEN CUR
-- Loop starts from here and selects each Seq and Amount of each record in each loop
FETCH NEXT FROM CUR INTO @Sale_Dates,@MAKE,@Sale_Price
WHILE @@FETCH_STATUS = 0
BEGIN
-- Updates with previous NOT NULL value
IF(@MAKE IS NULL)
BEGIN
UPDATE #TEMP SET MAKE = @Previous_MAKE
WHERE Sale_Dates = @Sale_Dates
END
-- Updates with previous NOT NULL value
IF(@Sale_Price IS NULL)
BEGIN
UPDATE #TEMP SET Sale_Price = @Previous_Sale_Price
WHERE Sale_Dates = @Sale_Dates
END
-- Store previous NOT NULL value
IF(@MAKE IS NOT NULL)
BEGIN
SET @Previous_MAKE = @MAKE
END
-- Store previous NOT NULL value
IF(@Sale_Price IS NOT NULL)
BEGIN
SET @Previous_Sale_Price = @Sale_Price
END
-- Fetches next record and increments the loop
FETCH NEXT FROM CUR INTO @Sale_Dates,@MAKE,@Sale_Price
END
CLOSE CUR;
DEALLOCATE CUR;
DBMS의 선택! – dario
누락 된 값은 어디에서 가져 오나요? – Eilidh
다른 사용자가 테이블을 만들면 첫 번째 섹션에서 볼 수있는 테이블보기를 만들기 위해 교차 조인을했습니다. 그래서 출력물을 가지고 작업해야합니다. row_number를 사용하여 순위를 만들려고했지만 아무 것도 이끌지 못했습니다. – User214122114