2014-02-26 51 views
0

相同的信息,我有一个查询应该返回这样的信息:获得标准结果

Type Quantity 
C  54 
D  20 

我有一个类型,该类型的数量,有时我对C数据而已,有时我有数据只有D,有时候我都有。我希望能够总是返回两种类型,并在情况下,我没有数据,我会一直显示两个这样的:

Type Quantity 
C  0 
D  20 

这个结果是基于带来的信息查询存在的桌子上,这样的情况下,我没有为C数据,结果只显示我:

Type Quantity 
D  20 

如何可以在查询我假数据使用SQL Server 2008 R2的情况下,其中的一个不存在一个总是C和D?

好吧,这是查询:

SELECT STUFF(
    (   
     SELECT ',' + N'' + CONVERT(NVARCHAR, [Type]) + ':' + CONVERT(NVARCHAR, COUNT([Quantity])) 
     FROM #MyTable GROUP BY [Type] 
     FOR XML PATH('') 
    ), 1, 1, '' 
) ; 

结果应该让这样的事情:

C:0, D:5 

即使我没有为C型

+0

请张贴查询时你应该总是指定长度。 –

+0

我发布了查询 – rgx71

回答

1

您需要一个表格,其中包含您想要的所有不同的types(对于我的查询,我将使用CTE)。然后,你可以这样做:

;WITH CTE AS 
(
    SELECT 'C' [Type] 
    UNION ALL 
    SELECT 'D' 
) 
SELECT STUFF(
    (   
     SELECT ',' + N'' + 
       CONVERT(NVARCHAR(20), [Type]) + ':' + 
       CONVERT(NVARCHAR(20), ISNULL(COUNT([Quantity]),0)) 
     FROM CTE A 
     LEFT JOIN #MyTable B 
      ON A.[Type] = B.[Type] 
     GROUP BY [Type] 
     FOR XML PATH('') 
    ), 1, 1, '' 
) ; 

作为一个说明,定义或转换为NVARCHAR

+0

是的,你说得对,我忘了长度,谢谢你的回答! – rgx71

0

你还没有数据没有向我们显示您的查询,但我强烈建议查看exists()函数;它可能是你正在寻找的东西。