2016-11-09 48 views
0

我一直拉着我的头发来解决这个问题..我可以将其转换为varchar并将%符号添加到结果?如何转换为varchar并将%符号添加到SQL

我已经将下面的代码放在查询中,并试图将其转换,但不断收到我不知道如何解决的错误。有人可以提出一些建议,如何简化和防止零问题的分歧。

select 'Conversion Rate' as Type, 
(
SELECT 
(
    COALESCE 
    (     
     CAST(CAST(nullif(t.ConvertedTrials,0) AS NUMERIC(18,2))/(CAST(nullif(t.UnconvertedTrials,0) AS NUMERIC(18,2))) * 100 as decimal(10,2)) 
     , 
     0 
    ) 
) AS Percentage 

FROM (
    SELECT 
    UnconvertedTrials = (
     SELECT count(*) FROM 
     (
     select memberid from membership where discountcodeid = '79a7fd7c-9ebe-4ec0-8ac0-95ea274f1f64' Group by membership.memberid 
     ) as a 
     ), 
    ConvertedTrials = (
     SELECT count(*) FROM 
     (
      SELECT membership.memberid 
      FROM Membership, Package 
      WHERE membership.PackageId = Package.Id 
      AND Package.PackageTypeId != 1 
      AND membership.memberid in (select memberid from membership where discountcodeid = '79a7fd7c-9ebe-4ec0-8ac0-95ea274f1f64') 
      Group by membership.memberid 
     ) as b 
     ) 
) as t 
) as Total 
+0

你能展示你的结果会是什么样子吗?另外,你得到的错误是什么? –

+0

铸造代码是什么样的?另外,尽管你可以给字符串添加一个百分比符号,但对于这些数据的目的地而言,这确实更令人担忧。这是一个显示任务。 –

回答

2
select 'Conversion Rate' as Type, 
RTRIM(CAST((
SELECT 
(
    COALESCE 
    (     
     CAST(CAST(nullif(t.ConvertedTrials,0) AS NUMERIC(18,2))/(CAST(nullif(t.UnconvertedTrials,0) AS NUMERIC(18,2))) * 100 as decimal(10,2)) 
     , 
     0 
    ) 
) AS Percentage 

FROM (
    SELECT 
    UnconvertedTrials = (
     SELECT count(*) FROM 
     (
     select memberid from membership where discountcodeid = '79a7fd7c-9ebe-4ec0-8ac0-95ea274f1f64' Group by membership.memberid 
     ) as a 
     ), 
    ConvertedTrials = (
     SELECT count(*) FROM 
     (
      SELECT membership.memberid 
      FROM Membership, Package 
      WHERE membership.PackageId = Package.Id 
      AND Package.PackageTypeId != 1 
      AND membership.memberid in (select memberid from membership where discountcodeid = '79a7fd7c-9ebe-4ec0-8ac0-95ea274f1f64') 
      Group by membership.memberid 
     ) as b 
     ) 
) as t 
) AS NVARCHAR(50))) + '%' as Total 

您的实际比例是相当大的子查询,这是很难看到如何把它们放在括号内 - 我有大约10老话 - 是什么好了吗?

  • 也许它更容易包住整个查询在另一个选择,例如,

    SELECT A,B FROM (<your query>) AS AQUERY

(这应该给完全相同的结果作为查询) - 在格式化B,则工作外部查询

这是我做的第二种方式

SELECT ORIGINAL.Type, RTRIM(CAST(ORIGINAL.Total as varchar(80))) + '%' AS Total 
FROM 
(
select 'Conversion Rate' as Type, 
(
SELECT 
(
    COALESCE 
    (     
     CAST(CAST(nullif(t.ConvertedTrials,0) AS NUMERIC(18,2))/(CAST(nullif(t.UnconvertedTrials,0) AS NUMERIC(18,2))) * 100 as decimal(10,2)) 
     , 
     0 
    ) 
) AS Percentage 

FROM (
    SELECT 
    UnconvertedTrials = (
     SELECT count(*) FROM 
     (
     select memberid from membership where discountcodeid = '79a7fd7c-9ebe-4ec0-8ac0-95ea274f1f64' Group by membership.memberid 
     ) as a 
     ), 
    ConvertedTrials = (
     SELECT count(*) FROM 
     (
      SELECT membership.memberid 
      FROM Membership, Package 
      WHERE membership.PackageId = Package.Id 
      AND Package.PackageTypeId != 1 
      AND membership.memberid in (select memberid from membership where discountcodeid = '79a7fd7c-9ebe-4ec0-8ac0-95ea274f1f64') 
      Group by membership.memberid 
     ) as b 
     ) 
) as t 
) as Total 
) ORIGINAL