SQL Server 2014 UNION 交叉应用
SQL Server 2014 UNION in CROSS APPLY
我有以下查询
SELECT DISTINCT
d.UserName,
i.itemID,
d.Score,
d.StoreCode,
d.Location
FROM
G.dbo.Users d
LEFT JOIN
G.dbo.Emails s on d.UserName=s.UserName
CROSS APPLY
(
SELECT TOP (1)
ii.ItemID
FROM
G.dbo.Dump ii
WHERE
ii.Username=d.UserName
AND
ii.endTime>DATEADD(hh,3,getDate())
) i
WHERE
s.serName is null
AND
d.Score>@_Score
AND
(d.processed=0)
GROUP BY
d.UserName,
i.itemID,
d.Score,
d.StoreCode,
d.Location
ORDER BY
d.UserName ASC
现在我需要修改它,因为 Table G.dbo.Dump
已被分成 20 个较小的表,现在我有 Dump_00
到 Dump_19
我尝试以这种方式使用 UNION
修改 CROSS APPLY
部分的一部分
CROSS APPLY
(
SELECT TOP (1)
ii.ItemID
FROM
(
SELECT TOP (1) FROM G.dbo.Dump_00
UNION
SELECT TOP (1) FROM G.dbo.Dump_01
UNION
.....
SELECT TOP (1) FROM G.dbo.Dump_19
) ii
WHERE
ii.UserName=d.UserName
AND
ii.EndTime>DATEADD(hh,3,getDate())
) i
但结果没有按预期工作
可以建议 UNION
是否是正确的方法,以及如何应用或其他解决方案?
谢谢!
从联合元素中删除 TOP 1
。不知道为什么要添加。从逻辑上讲,您正在寻找一个集合,该集合是所有表的并集。
另外,我认为你根本不想要工会。你想要串联。
CROSS APPLY
(
SELECT TOP (1) ii.ItemID
FROM
(
SELECT FROM G.dbo.Dump_00 --changed
UNION ALL --changed
SELECT FROM G.dbo.Dump_01 --changed
.....
) ii
) i
我有以下查询
SELECT DISTINCT
d.UserName,
i.itemID,
d.Score,
d.StoreCode,
d.Location
FROM
G.dbo.Users d
LEFT JOIN
G.dbo.Emails s on d.UserName=s.UserName
CROSS APPLY
(
SELECT TOP (1)
ii.ItemID
FROM
G.dbo.Dump ii
WHERE
ii.Username=d.UserName
AND
ii.endTime>DATEADD(hh,3,getDate())
) i
WHERE
s.serName is null
AND
d.Score>@_Score
AND
(d.processed=0)
GROUP BY
d.UserName,
i.itemID,
d.Score,
d.StoreCode,
d.Location
ORDER BY
d.UserName ASC
现在我需要修改它,因为 Table G.dbo.Dump
已被分成 20 个较小的表,现在我有 Dump_00
到 Dump_19
我尝试以这种方式使用 UNION
修改 CROSS APPLY
部分的一部分
CROSS APPLY
(
SELECT TOP (1)
ii.ItemID
FROM
(
SELECT TOP (1) FROM G.dbo.Dump_00
UNION
SELECT TOP (1) FROM G.dbo.Dump_01
UNION
.....
SELECT TOP (1) FROM G.dbo.Dump_19
) ii
WHERE
ii.UserName=d.UserName
AND
ii.EndTime>DATEADD(hh,3,getDate())
) i
但结果没有按预期工作
可以建议 UNION
是否是正确的方法,以及如何应用或其他解决方案?
谢谢!
从联合元素中删除 TOP 1
。不知道为什么要添加。从逻辑上讲,您正在寻找一个集合,该集合是所有表的并集。
另外,我认为你根本不想要工会。你想要串联。
CROSS APPLY
(
SELECT TOP (1) ii.ItemID
FROM
(
SELECT FROM G.dbo.Dump_00 --changed
UNION ALL --changed
SELECT FROM G.dbo.Dump_01 --changed
.....
) ii
) i