我有一个应该返回此信息的查询:
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类数据
答案 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()函数;它可能就是你要找的东西。