2017-05-05 80 views
0

我正在编写一个查询来获取某个产品的毛利润百分比“GP%”,以按产品每年将其放到C#网格视图中。我希望查询结果是动态的,在某些年份这个产品没有销售,所以结果将是(利润/销售)=(0/0)它将是空的。这个null不被C#接受。将空sql查询结果传输到一个字符串

查询是

SELECT 
    FORMAT((SELECT ((ISNULL(SUM([Profit]), NULL))/ISNULL(SUM([Sales]), NULL)) 
      FROM [dbo].[Sales] 
      WHERE [ProdHeir01_2] = 'Batteries' 
       AND [Sales_Year] = 2015 
       AND [Month_Number] BETWEEN 1 AND 8, 'P') AS [Percentage] 

此查询结果在 '空'。我如何插入一个条件来将null传递给一个字符串值。所以查询是动态的:)。

感谢很多提前......

问候

回答

0

这里是一个技术,你可能会发现有用:

选择0/CASE WHEN ISNULL([销售],0) = 0 THEN 1 ELSE [销售] END

+0

谢谢,但我在哪里可以写出选择和数学方程 – Hady

0

哈迪,你走了。

--CTE(Common Table Expression) with your query 
WITH preselect AS 
(
SELECT 
    FORMAT(
      (SELECT ISNULL(SUM([Profit]), NULL)/ISNULL(SUM([Sales]), NULL) 
       FROM [dbo].[Sales] 
       WHERE [ProdHeir01_2] = 'Batteries' 
       AND [Sales_Year] = 2015 
       AND [Month_Number] BETWEEN 1 AND 8 
      ) 
       ,'P' 
      ) AS [Percentage]) 

--Case statement that will return Null as string when Null and the percentage 
--when it isn't null 
SELECT CASE WHEN [Percentage] IS NULL THEN 'Null' ELSE [Percentage] END AS [Percentage] 
FROM preselect 
+0

谢谢杰森,这回答了这个问题。非常感谢。 – Hady