題目如上圖
1,2,4是入帳所以為正數
3是扣帳所以要轉成負數
扣帳要從最前面的入帳的數字開始扣
所以select後答案必須是
4 入帳 100
試了一陣子試不出來
感覺還離答案有一段差距
或是根本用錯方法
請各位大神協助!!
看一下合不合用
-- [type] A 為入帳
-- [type] B 為出帳
CREATE TABLE #Temp
(
[type] VARCHAR(10),
Price INT
)
INSERT INTO #Temp ([type],Price)
VALUES
('A',50),
('A',100),
('B',100),
('A',50)
SELECT
TOP 1
(SELECT SUM(PRICE)FROM #TEMP WHERE [type]='A') - (SELECT SUM(PRICE)FROM #TEMP WHERE [type]='B') AS Totle
FROM #TEMP
抱歉一開始發問答案寫錯了
這題正解應該是4 入帳 100
用你的來跑上圖的table
得到的答案會是
1 入帳 100
你的方法是算出數字,但a,b排序是錯的
我想知道的是怎麼樣讓
C欄位從 1和2計算後的數
再算出3,之後再算出4
依此類推
看一下合不合用
-- [type] A 為入帳
-- [type] B 為出帳
CREATE TABLE #Temp
(
Sn BIGINT,
[type] VARCHAR(10),
Price INT
)
DECLARE @Index BIGINT = 1
DECLARE @MAXCount BIGINT
DECLARE @TotlePrice BIGINT = 0
DECLARE @TempType VARCHAR(10)
DECLARE @TempPrice INT
INSERT INTO #Temp (Sn,[type],Price)
VALUES
(1,'A',50),
(2,'A',100),
(3,'B',100),
(4,'A',50)
SET @MAXCount = (SELECT COUNT(sn) FROM #TEMP)
WHILE(@Index <= @MAXCount)
BEGIN
SET @TempType = (SELECT [type] FROM #Temp WHERE sn=@Index)
SET @TempPrice = (SELECT PRICE FROM #Temp WHERE sn=@Index)
IF @TempType = 'A'
BEGIN
SET @TotlePrice = @TotlePrice + @TempPrice
END
ELSE IF @TempType = 'B'
BEGIN
SET @TotlePrice = @TotlePrice - @TempPrice
END
PRINT(@TempType)
PRINT(@TotlePrice)
SET @Index = @Index + 1
END
--SELECT @TotlePrice AS Totle
drop table #Temp
無法執行,還在找原因 看哪邊有問題
但應該是這個解法!!
我是直接略過CREATE TABLE和INSERT INTO
改用我的TABLE
不過直接運行你的也不行!!
你的不行是哪邊有錯?
DECLARE @Index BIGINT = 1
DECLARE @TotlePrice BIGINT = 0
無法指派預設值給本機變數。
必須宣告純量變數
好像是因為我是SQL2005的關系
我裝2008試看看
如果不能在來回報
如果4 不加入,只有sn 1,2,3的話
正解是2,A,50
原因如下
sn3為B,100
應該要先減掉sn1 A,50後
剩餘的50在減去sn2 A,100
如果B已用完,下方只剩A或沒東西了
@Index和@TempType應停在sn2的地方也就是 2 A
@TotlePrice為最後結果50
所以答案是2 入帳 50
但@Index-1,@TempType卻是停留在最後一筆
其實...在下只是拋磚引玉
基本上我是跟你說 我的解題方向是怎麼樣
如果不合適 您可以在微調
OK 非常感謝!!
已在微調了!!
declare @table as Table(
a int
,b nvarchar(50)
,c int
)
insert into @table
values(1,'入帳',50)
,(2,'入帳',100)
,(3,'扣帳',100)
,(4,'入帳',50)
select Sum(case when b = '扣帳' then -c else c end) as Sum_Cash from @table