0

我在master..spt_values支持的 SQL Server 中使用它,将其用作“月”数字支持(不要问我为什么;可能是旧查询即时写入):

SELECT 
    months.number as Month, 
    ISNULL(t2.NumVisits, 0) AS NumVisits, 
    ISNULL(t2.NumActivities, 0) AS NumActivities,
    ISNULL(t2.Estimated, 0) AS Estimated,
    ISNULL(t2.Accepted, 0) AS Accepted,
    ISNULL(t2.PercAccepted, 0) AS PercAccepted,
    ISNULL(t2.PercValue, 0) AS PercValue
FROM master..spt_values months
LEFT JOIN 
    (SELECT 
        *,
        CASE WHEN t1.NumVisits <> 0 THEN (CAST(t1.NumActivities AS DECIMAL) / t1.NumVisits) * 100 ELSE 0 END AS PercAccepted,
        CASE WHEN t1.Estimated <> 0 THEN (CAST(t1.Accepted AS DECIMAL) / t1.Estimated) * 100 ELSE 0 END AS PercValue
    FROM
        (SELECT
            MONTH(DateVisit) AS Month, 
            COUNT(*) AS NumVisits,
            SUM(CASE WHEN DateActivity is not null THEN 1 ELSE 0 END) AS NumActivities,
            SUM(Estimate) AS Estimated,
            SUM(CASE WHEN DateActivity is not null THEN Estimate ELSE 0 END) AS Accepted
        FROM [dbo].[Activities]
        WHERE 
            DateVisit IS NOT NULL 
            AND (@Year IS NULL OR YEAR(DateVisit) = @Year) 
            AND (@ClinicID IS NULL OR ClinicID = @ClinicID)
            AND (@MedicalID IS NULL OR MedicalID = @MedicalID)
            AND (@TreatmentTypeID IS NULL OR TreatmentTypeID = @TreatmentTypeID)
        GROUP BY MONTH(DateVisit)) t1
        ) t2
    ON months.number = t2.Month
WHERE 
    Type = 'P' AND number BETWEEN 1 AND 12
    AND (@QuarterID IS NULL 
        OR (@QuarterID = 1 AND months.number <= 3) 
        OR (@QuarterID = 2 AND months.number > 3 AND months.number <= 6) 
        OR (@QuarterID = 3 AND months.number > 6 AND months.number <= 9) 
        OR (@QuarterID = 4 AND months.number > 9 AND months.number <= 12))
ORDER BY months.number

不幸的是,现在我需要在另一个master..spt_values不支持的 SQL Server (Azure) 上迁移数据库:

Reference to database and/or server name in 'master..spt_values' is not supported in this version of SQL Server.

如何在上面的查询中快速替换该表?本地表?有什么例子吗?

4

0 回答 0