如何转换为varchar并将%符号添加到SQL

时间:2016-11-09 16:51:31

标签: sql sql-server

我一直在拉我的头发来解决这个问题。我可以将它转换为varchar并将%符号添加到结果中吗?

我已经在查询下面放置了代码,并尝试强制转换它,但不断收到我不知道如何解决的错误。有人可以就如何简化和防止除零问题提出一些建议。

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

1 个答案:

答案 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