获得标准结果的相同信息

时间:2014-02-26 19:02:58

标签: sql-server

我有一个应该返回此信息的查询:

Type  Quantity
C     54 
D     20

我有一个类型和那种类型的数量,有时我只有C的数据,有时我只有D的数据,有时候我有两个。我希望能够总是返回两种类型,如果我没有数据,我将始终显示这两样:

Type  Quantity
C     0
D     20

此结果基于一个带有表中信息的查询,因此如果我没有C的数据,结果只显示我:

Type  Quantity
D     20

我如何使用SQL Server 2008R2伪造查询中的数据,以防其中一个不存在时带来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类数据

2 个答案:

答案 0 :(得分: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

时指定长度

答案 1 :(得分:0)

您尚未向我们展示您的查询,但我强烈建议您查看exists()函数;它可能就是你要找的东西。