sql :做虚拟行
sql : do dummy rows
我有一个 table 这样的:
a1 b1
a1 b2
a2 b2
a2 b3
我想做一个“虚拟行”来得到这样的结果:
a1 b1 1
a1 b2 1
a1 b3 0
a2 b1 0
a2 b2 1
a2 b3 1
我已经完成了 JOIN,但它花费的时间太长,因为我的 table 中有 1.4M 行,有人有更好的主意吗?
这是一种使用 SQL 服务器语法
的方法
DECLARE @dummyTable TABLE(aValue VARCHAR(10),bValue VARCHAR(10));
INSERT INTO @dummyTable VALUES
('a1','b1')
,('a1','b2')
,('a2','b2')
,('a2','b3');
WITH DistinctA AS
(SELECT DISTINCT aValue FROM @dummyTable)
,DistinctB AS
(SELECT DISTINCT bValue FROM @dummyTable)
SELECT a.aValue
,b.bValue
,CASE WHEN EXISTS(SELECT 1
FROM @dummyTable AS dt
WHERE dt.aValue=a.aValue AND dt.bValue=b.bValue) THEN 1 ELSE 0 END AS Existing
FROM DistinctA AS a
CROSS JOIN DistinctB AS b
ORDER BY a.aValue,b.bValue
我有一个 table 这样的:
a1 b1
a1 b2
a2 b2
a2 b3
我想做一个“虚拟行”来得到这样的结果:
a1 b1 1
a1 b2 1
a1 b3 0
a2 b1 0
a2 b2 1
a2 b3 1
我已经完成了 JOIN,但它花费的时间太长,因为我的 table 中有 1.4M 行,有人有更好的主意吗?
这是一种使用 SQL 服务器语法
的方法DECLARE @dummyTable TABLE(aValue VARCHAR(10),bValue VARCHAR(10));
INSERT INTO @dummyTable VALUES
('a1','b1')
,('a1','b2')
,('a2','b2')
,('a2','b3');
WITH DistinctA AS
(SELECT DISTINCT aValue FROM @dummyTable)
,DistinctB AS
(SELECT DISTINCT bValue FROM @dummyTable)
SELECT a.aValue
,b.bValue
,CASE WHEN EXISTS(SELECT 1
FROM @dummyTable AS dt
WHERE dt.aValue=a.aValue AND dt.bValue=b.bValue) THEN 1 ELSE 0 END AS Existing
FROM DistinctA AS a
CROSS JOIN DistinctB AS b
ORDER BY a.aValue,b.bValue