我学习SQL无效,我有表,看起来像这样:SQL nvarchar的是和运营商
Id Name Payd Note
1 John 5.00 R:8days;U:5$
2 Adam 5.00 R:8days;
3 John 10.00 R:8days;
4 John 10.00 R:8days;
5 Adam 15.00 R:30days;
我想让这样的事情:
Id Name Usage 5.00 10.00 15.00 Sum
1 John 5 5.00 20.00 0 25.00
2 Adam 5.00 0 15.00 20.00
我要检查注意列中是否存在'U:5 $',然后向注释列中具有'U:5 $'的该客户添加5,如果它没有添加任何内容。
我的代码如下所示:
;with cte as (
select Customer, PaydAmount, PaydAmount as Payd, Note as Usage
from t1
)
select
Customer, Usage
,[4.00] = ISNULL([4.00],0)
,[5.00] = ISNULL([5.00],0)
,[9.00] = ISNULL([9.00],0)
,[10.00] = ISNULL([10.00],0)
,[15.00] = ISNULL([15.00],0)
,[18.00] = ISNULL([18.00],0)
,[20.00] = ISNULL([20.00],0)
,[25.00] = ISNULL([25.00],0)
,[50.00] = ISNULL([50.00],0)
,[Payd] =ISNULL([4.00],0) + ISNULL([5.00],0) + ISNULL([9.00],0) + ISNULL([10.00],0) + ISNULL([15.00],0) + ISNULL([18.00],0) + ISNULL([20.00],0) + ISNULL([25.00],0) + ISNULL([50.00],0)
from cte
pivot (
sum(PaydAmount) for Payd in ([4.00],[5.00],[9.00], [10.00], [15.00],[18.00], [20.00], [25.00], [50.00]))pvt
order by Customer;
您的输出很复杂。使用列后会发生什么? –
好吧,支付的金额是静态的,所以它可以支付4.00 $,5.00 $,9.00 $ ...,并在这些coulumns中总结了所有支付的金额与列名相同的金额。例如约翰支付2次4美元,那么约翰在4.00列就有8美元。最后的总和是所有支付金额的总和。我只是想检查是否有U:5 $的记录,然后在客户的5列中添加5,他的笔记里有U5:$。 – vidooo
从错误消息看来,您的金额存储在“NVARCHAR”列中。要么确保它们存储在'MONEY'或'DECIMAL'类列中,或者'CAST'将数据存储到'SUM'中的'MONEY'或'DECIMAL'。 –