2016-11-13 7 views
0

和演算子には無効であり、私はこのようになりますテーブルがあります。SQLのデータ型はnvarcharは、私はSQLを勉強

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 

私がいることを確認したい:私はこのような何かを作りたい

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; 

をnoteカラムに「U:5 $」がある場合はその列に「U: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; 
+0

あなたの出力は複雑です。使用列の後にはどうなりますか? –

+0

OK、支払われる金額は静的なので、4.00 $、5.00 $、9.00 $を支払うことができます。これらの列には、列名と同じ金額が支払われたすべての金額が合計されます。たとえば、ジョンのpayd 2回4 $は、ジョンによって4.00の列で8 $です。最後の合計は、すべての支払額の合計です。私はちょうどU:5 $があるかどうかをチェックして、実際にU5:$を彼のメモに入れた顧客が5列5を追加したいとします。 – vidooo

+0

エラーメッセージから、金額が 'NVARCHAR'列に格納されているように見えます。 'MONEY'または' DECIMAL'型カラムに格納されているか、 'SUM'の' MONEY'または 'DECIMAL'にデータが' CAST'されているかを確認してください。 –

答えて

2

私はあなたの完全な出力が何を表すかわかりません。しかし、最初の3つの列は、条件付きの集約を使用して取得するのは簡単です:

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の列、およびpaydの値は小数点/数値型であることを前提とする15種のこと。浮動体での等価比較はお勧めしません。

+0

これはうまく動作します、どうすればPaydでグループ化できますか? – vidooo

+0

@vidooo。 。 。この質問は 'name'でグループ化することに関するものです。別の質問がある場合は、*別の*質問をしてください。私はこれがここの質問に答えると信じています。 –

+0

ご協力いただきありがとうございます – vidooo

関連する問題