--表結構
CREATE TABLE [dbo].#t1(
T DECIMAL(18,2),
L DECIMAL(18,2),
A DECIMAL(18,2),
Q INT,
公式 NVARCHAR(999),
值 DECIMAL(18,2)
)
--數值
INSERT INTO #t1(T,L,A,Q,公式)VALUES( 3200,3840, 3300,5,'CASE WHEN A<=T THEN Q WHEN A<L THEN Q*(L-A)/(L-T) ELSE 0 END' )
INSERT INTO #t1(T,L,A,Q,公式)VALUES( 8,10, 0,5,'CASE WHEN A<=T THEN Q WHEN A<L THEN Q*(L-A)/L ELSE 0 END' )
--實作效果:
根據公式列中寫好的公式,計算出值,填寫到值這一欄

望給予幫助,謝謝
uj5u.com熱心網友回復:
-- 計算
declare @t decimal(18,2),@l decimal(18,2),@a decimal(18,2),@q int,@gs nvarchar(999),
@tsql nvarchar(2000)
declare ap scroll cursor for
select T,L,A,Q,公式 from #t1
open ap
fetch first from ap into @t,@l,@a,@q,@gs
while(@@fetch_status<>-1)
begin
select @tsql=N'update #t1 set 值='+@gs
+N' where T='+cast(@t as nvarchar(100))
+N' and L='+cast(@l as nvarchar(100))
+N' and A='+cast(@a as nvarchar(100))
+N' and Q='+cast(@q as nvarchar(100))
exec(@tsql)
fetch next from ap into @t,@l,@a,@q,@gs
end
close ap
deallocate ap
-- 結果
select * from #t1
uj5u.com熱心網友回復:
單條的試試下面的,最好有個主鍵,多條批量處理只能想到回圈和游標
DECLARE @SQL VARCHAR(8000)
DECLARE @ID INT
SET @ID=2
;WITH CTE
AS
(SELECT *,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RN FROM #T1)
SELECT @SQL='WITH CTE
AS
(SELECT *,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RN FROM #T1)
UPDATE CTE SET 值='+公式+' WHERE RN='+CAST(@ID AS VARCHAR)
FROM CTE WHERE RN=@ID
EXEC(@SQL)
uj5u.com熱心網友回復:
如果公式各類不多的話按不同公式來更新即可:
--表結構
CREATE TABLE [dbo].#t1
(
T DECIMAL(18, 2),
L DECIMAL(18, 2),
A DECIMAL(18, 2),
Q INT,
公式 NVARCHAR(999),
值 DECIMAL(18, 2)
);
--數值
INSERT INTO #t1(T,L,A,Q,公式)VALUES( 3200,3840, 3300,5,'CASE WHEN A<=T THEN Q WHEN A<L THEN Q*(L-A)/(L-T) ELSE 0 END' )
INSERT INTO #t1(T,L,A,Q,公式)VALUES( 8,10, 0,5,'CASE WHEN A<=T THEN Q WHEN A<L THEN Q*(L-A)/L ELSE 0 END' )
--變數
DECLARE @i INT, @n INT;
DECLARE @gs VARCHAR(500);
DECLARE @sql VARCHAR(MAX);
--按公式類別分類
SELECT ROW_NUMBER() OVER (ORDER BY 公式) rowid, 公式 INTO #tt FROM #t1 GROUP BY 公式;
--按公式類別遍歷
SELECT @i = MIN(rowid), @n = MAX(rowid)FROM #tt;
WHILE (@i <= @n)
BEGIN
SELECT @gs = 公式 FROM #tt WHERE rowid = @i;
SET @sql = 'update #t1 set 值=' + @gs + ' where 公式=''' + @gs + ''''; --生成腳本
EXEC (@sql); --執行腳本,可以print看效果
SET @i = @i + 1;
END;
SELECT * FROM #t1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/262282.html
標籤:應用實例
上一篇:tempdb大小問題
下一篇:剛學資料庫
