将非现有数据添加到SQL查询中

时间:2015-05-16 07:42:10

标签: sql sql-server

我的SQL查询返回以下结果(screenshot):

x           y           count
----------- ----------- -----------
1           1           10
1           2           2
2           4           3
2           5           5
4           1           5
5           1           8

我想要的是x,y应该总是包含1到5个值,即使查询没有返回它们,在上面的场景中x缺失3.如何在这里添加缺失值在1之间&安培; 5。

先谢谢

2 个答案:

答案 0 :(得分:3)

首先,您需要生成所需的数据。您可以使用数字表格。使用CROSS JOIN生成两个表的所有可能组合。最后,OUTER JOIN生成的数据与您的表格。

在下面的查询中,我使用union来构建数字列表,而不是从表中获取它们。但这个想法仍然是一样的:

SELECT XList.x, YList.y, #temp.count
FROM (
    SELECT 1 AS x UNION ALL
    SELECT 2      UNION ALL
    SELECT 3      UNION ALL
    SELECT 4      UNION ALL
    SELECT 5
) AS XList 
CROSS JOIN (
    SELECT 1 AS y UNION ALL
    SELECT 2      UNION ALL
    SELECT 3      UNION ALL
    SELECT 4      UNION ALL
    SELECT 5
) AS YList
LEFT JOIN #temp ON XList.x = #temp.x AND YList.y = #temp.y

结果:

x           y           count
----------- ----------- -----------
1           1           10
2           1           NULL
3           1           NULL
4           1           5
5           1           8
1           2           2
2           2           NULL
3           2           NULL
4           2           NULL
5           2           NULL
1           3           NULL
2           3           NULL
3           3           NULL
4           3           NULL
5           3           NULL
1           4           NULL
2           4           3
3           4           NULL
4           4           NULL
5           4           NULL
1           5           NULL
2           5           5
3           5           NULL
4           5           NULL
5           5           NULL

答案 1 :(得分:2)

你可以这样做:

select t1.x, t2.y, s.count from 
(values(1),(2),(3),(4),(5)) t1(x) cross join
(values(1),(2),(3),(4),(5)) t2(y)  
left join #temp s on t1.x = s.x and t2.y = s.y