您好我在网上看到了一些有用的提示,但我仍有一些问题。
很抱歉,由于声誉不佳,我无法使用图片。
http://www.imagebam.com/image/c49fe2295124505
这是"主要"我们正在创建的新网站的一部分,它基于SQL SERVER 2012," TAREAS" table是主键表,它有自己的连接。我找到了一种方法来搜索"树"表,TAREA = TASK,西班牙语到英语,所以基本上它是一个任务管理器,一个任务可以是一个主要任务的一部分,或者是一个可以有更多孩子的第二个任务"任务。我使用公用表表达式做到了。
这里的东西在TAREAS表上的ID_TipoTarea(TaskType)上,可以在一个特定类型的任务上,例如在图上有2种类型的可用(但有更多),TipoTareaDesarrollo或TipoTareaEventoSalon, ID_TipoTarea不能在两个表上,所以如果ID_TipoTarea = 1然后我加入TIpoTareaDesarrollo,如果ID_TipoTarea = 2然后我加入TipoTareaEventoSalon,依此类推ID_TipoTarea = 3到另一个表,并且会有更多类型,你能帮助我吗? ?
如何使用此查询实现(这是获取主表上所有级别的查询,但我需要条件连接)。
with tareasCTE (id_tarea,id_tareaorigen,id_tipoTarea,nivel)
as(
select *,0 as nivel from tareas t
where id_tarea=@ID_Tarea
union all
select t2.*,nivel+1 from tareasCTE t
inner join tareas t2
on t.id_tarea=t2.id_tareaOrigen
)
我得到了这个输出
ID_Tarea,ID_TareaORigen,Nivel,ID_TipoTarea
3 NULL 0 null(无连接)
4 3 1 1(与TipoTareaDesarrollo合作)
5 3 1 1(与TipoTareaDesarrollo合作)
6 3 1 3(用AnotherTable加入这个)
7 4 2 2(与TipoTareaEventoSalon一起加入此活动)
8 4 2 2(与TipoTareaEventoSalon合作)
9 4 2 4(用AnotherTable2加入这个)
10 9 3 1(与TipoTareaDesarrollo合作)
11 9 3 1(与TipoTareaDesarrollo一起加入此活动)
12 9 3 null(无加入)
13 12 4 1(与TipoTareaDesarrollo合作)
14 12 4 2(与TipoTareaEventoSalon一起加入此活动)
15 12 4 2(与TipoTareaEventoSalon一起加入此活动)
非常感谢你。
答案 0 :(得分:0)
您可以使用UNION子句将表TipoTareaDesarrollo,TipoTareaEventoSalon,AnotherTable,AnotherTable2组合到一个表中,并将其打包在第二个CTE中:
WITH TipoAreasCTE as
(
SELECT * FROM TipoTareaDesarrollo
UNION
SELECT * FROM TipoTareaEventoSalon
UNION
SELECT * FROM AnotherTable
UNION
SELECT * FROM AnotherTable2
)
然后您可以将tareasCTE加入TipoAreasCTE。
请注意,UNION中的不同表必须具有相同数据类型的列数;如果不是,您必须使用SELECT列表并且可能CAST数据类型使它们相似。