相关疑难解决方法(0)

SQL Server递归查询

我是SQL Server开发的新手.我的大部分经验都是通过Oracle完成的.

假设我有下表包含约会对象

CREATE TABLE [dbo].[Appointments](
    [AppointmentID] [int] IDENTITY(1,1) NOT NULL,
    .......
    [AppointmentDate] [datetime] NOT NULL,
    [PersonID] [int] NOT NULL,
    [PrevAppointmentID] [int] NULL,
 CONSTRAINT [PK_Appointments] PRIMARY KEY CLUSTERED ([AppointmentID] ASC)
Run Code Online (Sandbox Code Playgroud)

可以推迟约会,因此,当发生这种情况时,会在表上创建一个新行,其中PrevAppointmentID字段包含原始约会的ID.

我想查询以获取人员约会的历史记录.例如,如果ID = 1的任命被推迟两次,并且这些延期已创建ID为= 7且ID = 12的约会,则我希望进行一个返回以下结果的查询:

AppointmentID         PrevAppointmentID
-----------------    ----------------------
1                     NULL
7                     1
12                    7
Run Code Online (Sandbox Code Playgroud)

如果使用Oracle,我记得可以使用CONNECT BY PRIOR子句获得类似的东西.

有没有办法进行查询以实现这些结果?

我正在使用SQL Server 2005/2008.

提前致谢

sql-server sql-server-2005 recursive-query sql-server-2008

15
推荐指数
1
解决办法
1万
查看次数

如何在sql server中调用递归函数

我有一张桌子如下

cat_id  Cat_Name    Main_Cat_Id

1       veg         null
2       main course 1
3       starter     1
4       Indian      2
5       mexican     2
6       tahi        3
7       chinese     3
8       nonveg      null
9       main course 8
10      indian      9
11      starter     8
12      tahi        11
13      chinese     11
Run Code Online (Sandbox Code Playgroud)

(Main_Cat_Id是之前添加的类别的cat_id)

这个表被用于类别其中产品蔬菜类有两个子类别主菜起动机,其是通过识别main_cat_id 和那些子类别再次具有子类别如印度墨西哥

这种分类取决于用户; 他可以为印度人,墨西哥人添加更多子类别,以便他可以进行任何级别的分类

现在我必须选择任何节点的所有子类别,如果我采取veg我必须选择

(1)veg > (2)main course(1) > (4)indian(2)
                           > (5)mexican(2)
       > (3)starter(1)     > (6)thai(3)
                           > (7)chinese(3)
Run Code Online (Sandbox Code Playgroud)

形成字符串1,2,4,5,3,6,7 …

sql-server sql-function sql-server-2008

7
推荐指数
1
解决办法
3万
查看次数

sqlite递归祖先查询

我正在尝试弄清楚如何对分层表使用递归查询。我需要获取给定记录的祖先,并且记录应该按照它们在层次结构中的级别进行排序。也就是说,第一个记录应该是顶部节点,下一个应该是一个子节点,然后是它的子节点,直到被查询的记录。

考虑一个名为“食物”的表,其中包含以下数据。这是一个简单的层次结构,除了顶部记录之外的每条记录都有一个父记录。

id         | parent
-----------+---------
top        |
fruit      | top
red        | fruit
cherry     | red
apple      | red
orange     | fruit
clementine | orange
mandarin   | orange
Run Code Online (Sandbox Code Playgroud)

为了了解有关该主题的各种网页,我拼凑了以下查询,该查询给出了“普通话”记录的所有祖先,包括普通话记录本身。

with recursive
    child_record(id) as (
        values('mandarin')

        union

        select parent
        from food, child_record
        where food.id = child_record.id
    )
select id from food
    where food.id in child_record;
Run Code Online (Sandbox Code Playgroud)

但是,该查询以在我看来是任意顺序的记录返回:

fruit
mandarin
orange
top
Run Code Online (Sandbox Code Playgroud)

我希望记录首先按最高记录排序,然后再向下排列到普通话记录。

top
fruit
orange
mandarin
Run Code Online (Sandbox Code Playgroud)

如何构建该查询以按我想要的顺序提供记录?

sqlite recursive-query

5
推荐指数
1
解决办法
1394
查看次数