将CTE交叉查询到单个查询(MSSQL)

时间:2016-03-30 19:05:17

标签: sql-server

下午好,

我在我的SQL数据库中有2个表,第一个是我对一个人的天数,以及其他人每天的注册表,我想知道这个人是否有每个人的注册表进入规范范围的一天。

我遇到过一个查询,它使用CTE以独立的天数返回范围,而其他查询则按人和日的方式查看注册表组,但我无法跨越这些查询。

底部有一张包含查询和每个结果的图片。

感谢。

My SQL querys

1 个答案:

答案 0 :(得分:0)

您可以在一个语句中使用多个CTE,因此您可以将每个查询放在单独的CTE中并在以后加入它们:

enter image description here

SELECT
  p.cedula, p.starttime, 
  r.Descr, r.Candidad
FROM ctePeriod p
LEFT JOIN cteRegistry r on r.cedula = p.cedula AND r.Dia = p.StartTime
ORDER BY p.cedula, p.starttime

以上作为单个查询。

另一种方法是将Query1和Query2的结果放入临时表,并在那些临时表上构建最终查询,例如:

SELECT DISTINCT ...
INTO #Period
FROM CTE
WHERE ...

SELECT ...
INTO #Registro
FROM Registro
GROUP BY ...

SELECT
  p.cedula, p.starttime, 
  r.Descr, r.Candidad
FROM #Period p
LEFT JOIN #Registro r on r.cedula = p.cedula AND r.Dia = p.StartTime
ORDER BY p.cedula, p.starttime