1

COUNT() が 2 未満の場合、単語「years」から「s」を削除しようとしていますが、何らかの理由で構文が正しくありません。

エラー: キーワード「IF」付近の構文が正しくありません。キーワード「convert」付近の構文が正しくありません。

stuff(
        (
        select ',' + Related_name + ' (' + (select
        IF COUNT(begin_date) > 1 BEGIN convert(varchar(10), COUNT(begin_date))  + ' years)' END
        ELSE BEGIN convert(varchar(10), COUNT(begin_date))  + ' year)'
        from cus_relationship subInnerR
        where subInnerR.master_customer_id = c.master_customer_id
        and subInnerR.related_master_customer_id = innerR.related_master_customer_id
        and subInnerR.relationship_type = 'ADVSPR'
        and subInnerR.relationship_code = 'CLUB'
        and subInnerR.reciprocal_code = 'FACADV')
        from cus_relationship innerR
        where [...]
4

4 に答える 4

2

このようにしてみてください(コメントでgveeがコメントしたように、これにより繰り返しコードが削減されます!!):-

 select ',' + Related_name + ' (' + (select
    Convert(varchar(10), Count(begin_date)) + ' year' + 
    CASE WHEN Count(begin_date) > 1 THEN 's'    ELSE '' END + ')'
    from cus_relationship subInnerR
    where subInnerR.master_customer_id = c.master_customer_id
    and subInnerR.related_master_customer_id = innerR.related_master_customer_id
    and subInnerR.relationship_type = 'ADVSPR'
    and subInnerR.relationship_code = 'CLUB'
    and subInnerR.reciprocal_code = 'FACADV')
    from cus_relationship innerR
    where [...]
于 2013-09-18T14:47:16.223 に答える
1

私は同じコードを再利用するのが好きではないので、次のように使用CASEします。

CONVERT(VARCHAR(10), COUNT(begin_date)) 
+ ' year' 
+ CASE WHEN COUNT(begin_date) > 1 THEN 's' ELSE '' END
+ ')'

読みやすくするために複数行に分割

于 2013-09-18T14:51:13.340 に答える
0

CASE次の代わりにステートメントを使用してこれを行う必要がありますIF

case
    when COUNT(begin_date) > 1 then
        convert(varchar(10), COUNT(begin_date))  + ' years)'
    else
        convert(varchar(10), COUNT(begin_date))  + ' year)'
end
于 2013-09-18T14:46:19.750 に答える