Иерархические запросы в SQL Server 2005

Вот один вариант с использованием CTE:

WITH male AS (
    SELECT Name, ROW_NUMBER() OVER (ORDER BY Name) rn
    FROM yourTable
    WHERE Gender = 'Male'
),
female AS (
    SELECT Name, ROW_NUMBER() OVER (ORDER BY Name) rn
    FROM yourTable
    WHERE Gender = 'Female'
)

SELECT m.Name AS Male, f.Name AS Female
FROM male m
INNER JOIN female f
    ON m.rn = f.rn;

Демо

11
задан Taryn 16 July 2013 в 20:31
поделиться

5 ответов

Используя обоих, я нашел, что ПОДКЛЮЧЕНИЕ несколько более гибко и легче использовать, чем CTE's. Вопрос не отличается от одного, я ответил несколько недель назад. Посмотрите Здесь для краткого сравнения ПОДКЛЮЧЕНИЯ и CTE's и Здесь для примера запроса с помощью CTE's.

3
ответ дан 3 December 2019 в 02:12
поделиться

Это составляет Вашу типичную иерархическую таблицу и использует CTE, чтобы выбрать структуру иерархии и создать путь для каждого объекта.

CREATE TABLE tblHierarchy (ID int, ParentID int NULL, Name varchar(128));

INSERT INTO tblHierarchy VALUES (1, NULL, '1');
INSERT INTO tblHierarchy VALUES (2, NULL, '2');
INSERT INTO tblHierarchy VALUES (3, NULL, '3');
INSERT INTO tblHierarchy VALUES (4, 1, '1.1');
INSERT INTO tblHierarchy VALUES (5, 1, '1.2');
INSERT INTO tblHierarchy VALUES (6, 4, '1.1.1');

WITH Parent AS
(
    SELECT
        ID,
        ParentID,
        Name AS Path
    FROM
        tblHierarchy
    WHERE
        ParentID IS NULL

    UNION ALL

    SELECT
        TH.ID,
        TH.ParentID,
        CONVERT(varchar(128), Parent.Path + '/' + TH.Name) AS Path
    FROM
        tblHierarchy TH
    INNER JOIN
        Parent
    ON
        Parent.ID = TH.ParentID
)
SELECT * FROM Parent

ВЫВОД:

ID  ParentID    Path
1   NULL        1
2   NULL        2
3   NULL        3
4   1       1/1.1
5   1       1/1.2
6   4       1/1.1/1.1.1
25
ответ дан 3 December 2019 в 02:12
поделиться

Просто к вашему сведению. SQL Server 2008 поддерживает новый идентификатор иерархии типов данных.

3
ответ дан 3 December 2019 в 02:12
поделиться

в SQL Server 2005 можно использовать Общие выражения таблицы (CTE) для этого.

1
ответ дан 3 December 2019 в 02:12
поделиться

Чтение это:

http://www.sitepoint.com/article/hierarchical-data-database/2/

Это должно дать Вам некоторое представление...

2
ответ дан 3 December 2019 в 02:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: