Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL nvarchar对于sum运算符无效_Sql_Sql Server - Fatal编程技术网

SQL nvarchar对于sum运算符无效

SQL nvarchar对于sum运算符无效,sql,sql-server,Sql,Sql Server,我正在学习SQL,我的表如下所示: 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

我正在学习SQL,我的表如下所示:

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
;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;
我想做这样的东西:

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
;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;
我想检查备注栏中是否有“U:5$”,然后向备注栏中有“U:5$”的客户添加一个5,如果没有,则不添加任何内容

我的代码如下所示:

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
;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;

我不确定你的全部产出代表什么。但使用条件聚合很容易获得前三列:

select row_number() over (order by (select null)) as id,
       name,
       max(case when note like '%U:5$' then 5 end) as usage,
       sum(case when payd = 5.00 then payd else 0 end) as [5.00],
       sum(case when payd = 10.00 then payd else 0 end) as [10.00],
       sum(case when payd = 15.00 then payd else 0 end) as [15.00],
       sum(payd) as total
from cte
group by name;

请注意,5、10和15排序的列假定
payd
中的值是十进制/数字类型。不建议对浮点数进行相等比较。

我不确定您的完整输出代表什么。但使用条件聚合很容易获得前三列:

select row_number() over (order by (select null)) as id,
       name,
       max(case when note like '%U:5$' then 5 end) as usage,
       sum(case when payd = 5.00 then payd else 0 end) as [5.00],
       sum(case when payd = 10.00 then payd else 0 end) as [10.00],
       sum(case when payd = 15.00 then payd else 0 end) as [15.00],
       sum(payd) as total
from cte
group by name;

请注意,5、10和15排序的列假定
payd
中的值是十进制/数字类型。不建议对浮点数进行相等比较。

您的输出很复杂。在使用列之后会发生什么?好的,支付的金额是静态的,因此可以是支付4.00美元、5.00美元、9.00美元。。。在这些列中,所有已支付的值的总和与列名称相同。例如,john支付2乘以4美元,那么john在4.00列中有8美元。末尾的金额是所有已付款金额的总和。我只想检查笔记中是否有U:5$,然后将实际在笔记中有U5$的客户添加到5列中。从错误消息看,您的金额似乎存储在
NVARCHAR
列中。请确保它们存储在
MONEY
DECIMAL
类型列中,或
CAST
将数据转换为
MONEY
SUM
中的DECIMAL。您的输出非常复杂。在使用列之后会发生什么?好的,支付的金额是静态的,因此可以是支付4.00美元、5.00美元、9.00美元。。。在这些列中,所有已支付的值的总和与列名称相同。例如,john支付2乘以4美元,那么john在4.00列中有8美元。末尾的金额是所有已付款金额的总和。我只想检查笔记中是否有U:5$,然后将实际在笔记中有U5$的客户添加到5列中。从错误消息看,您的金额似乎存储在
NVARCHAR
列中。请确保它们存储在
MONEY
DECIMAL
类型列中,或
CAST
将数据转换为
MONEY
DECIMAL
中的
SUM
中。这样很好,请问我如何按分组Payd@vidooo . . . 这个问题是关于按
名称分组的。如果你还有其他问题,那么再问另一个问题。我相信这回答了这里的问题。这很好,我可以问你我如何分组吗Payd@vidooo . . . 这个问题是关于按
名称分组的。如果你还有其他问题,那么再问另一个问题。我相信这就回答了这个问题。