Разделение таблицы с использованием 2 столбцов - PullRequest
17 голосов
/ 12 января 2011

Можно ли разделить таблицу, используя 2 столбца вместо 1 для функции разделения?

Рассмотрим таблицу с 3 столбцами

    ID (int, primary key, 
    Date (datetime), 
    Num (int)

Я хочу разбить эту таблицу на 2 столбца: Date и Num.

Это то, что я делаю, чтобы разбить таблицу на 1 столбец (дата):

create PARTITION FUNCTION PFN_MonthRange (datetime)
AS
RANGE left FOR VALUES ('2009-11-30 23:59:59:997',
                       '2009-12-31 23:59:59:997',
                       '2010-01-31 23:59:59:997',
                       '2010-28-02 23:59:59:997',
                       '2010-03-31 23:59:59:997')
go

Ответы [ 3 ]

40 голосов
/ 12 января 2011

Плохие новости: Функция разделения должна быть определена в одном столбце.

Благая весть: Этот единственный столбец может быть постоянным вычисляемым столбцом , который представляет собой комбинацию двух столбцов, по которым вы пытаетесь разделить.

14 голосов
/ 16 января 2012

Я обнаружил, что это было более простое решение

select ROW_NUMBER() over (partition by CHECKSUM(value,ID) order by SortOrder) as Row From your_table
3 голосов
/ 12 января 2011

Собственно, нет, вы не можете разделить на два столбца в SQL Server.

Есть несколько вещей, которые вы могли бы сделать, иметь таблицу поиска, которую вы используете для извлечения произвольного целого числа (раздела), в котором находится каждое значение, но у вас есть максимум 1000 разделов, поэтому они начнут занимать то же пространство , Подход с вычисляемыми столбцами страдает той же проблемой: у вас есть ограничение в 1 тыс. Разделов, скорее всего, вы его уничтожите.

Я бы, вероятно, просто придерживался раздела даты и располагался вправо 1-го числа месяца, а не влево в последней части месяца.

Что вы намерены получить от значения второго раздела?

...