2016-01-11 1 views
2

Действительно, я хотел бы, чтобы кто-то мог помочь мне с этим запросом. Я хочу получить это как пример. Я не хочу использовать «Pivot». У меня есть освещенные предметы под названием «Серии», для которых, очевидно, нужна группа, потому что это повторяется слишком много раз, поэтому я группирую ее. Таким образом, каждый элемент поля «serie» имеет список кодов от 001 до 100, тогда я просто хочу получить минимальное количество этого списка, поэтому «001» и максимальное число «100» для каждого из месяцы.Как я могу создать такой запрос без pivot?

Пожалуйста, помогите мне с этим, Заранее спасибо.

Пример:

SERIE    JAN  FEB  MAR APRI MAY  JUN  JUL 
        D | H D | H  D | H D | H D | H D | H D | H 

Recibo CA   01 10 02 50 01 10 02 50 
Recibo VA-03  04 20 05 80 
Recibo UV   08 40 03 10 
Recibo VA-02 
Recibo VA-04 
Recibo VA-01 
Recibo WH 
Factura 0003 

enter image description here

Мои данные в моей базе данных, как это показано здесь.

Id  Serie  Month Serie number 
    1 Factura 0003 Jan  4771   
    2 Factura 0003 Jan  4779   
    3 Factura 0003 Jan  4792   
    4 Factura 0003 Febr 4864   
    5 Factura 0003 Febr 4892  
+0

Пожалуйста, есть изображение, если у вас есть сомнения. –

+2

Используйте выражения CASE. например 'SELECT SERIE, CASE КОГДА x THEN y END [col1] ...' – ZLK

+0

И почему вы не хотите использовать опорную точку? – thepirat000

ответ

0

Вы можете эмулировать Pivot по диагонали матрицы умножения:

With test ([Id], [Serie], [Month], [Serie number]) 
As (
    Select 1, 'Factura 0003', 'Jan', 4771 Union 
    Select 2, 'Factura 0003', 'Jan', 4779 Union 
    Select 3, 'Factura 0003', 'Jan', 4792 Union 
    Select 4, 'Factura 0003', 'Feb', 4864 Union 
    Select 5, 'Factura 0003', 'Feb', 4892 
), diagonal_matrics ([Month], [Jan], [Feb], [Mar], [Apr], [May], [Jun], [Jul], [Aug], [Sep], [Oct], [Nov], [Dec]) 
As (
    Select 'Jan', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL Union 
    Select 'Feb', NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL Union 
    Select 'Mar', NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL Union 
    Select 'Apr', NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL Union 
    Select 'May', NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL Union 
    Select 'Jun', NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL Union 
    Select 'Jul', NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL Union 
    Select 'Aug', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL Union 
    Select 'Sep', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL Union 
    Select 'Oct', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL Union 
    Select 'Nov', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL Union 
    Select 'Dec', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1 
) 
Select [Serie], 
    Min([Serie number] * [Jan]) [Jan Min], Max([Serie number] * [Jan]) [Jan Max], 
    Min([Serie number] * [Feb]) [Feb Min], Max([Serie number] * [Feb]) [Feb Max], 
    Min([Serie number] * [Mar]) [Mar Min], Max([Serie number] * [Mar]) [Mar Max], 
    Min([Serie number] * [Apr]) [Apr Min], Max([Serie number] * [Apr]) [Apr Max], 
    Min([Serie number] * [May]) [May Min], Max([Serie number] * [May]) [May Max], 
    Min([Serie number] * [Jun]) [Jun Min], Max([Serie number] * [Jun]) [Jun Max], 
    Min([Serie number] * [Jul]) [Jul Min], Max([Serie number] * [Jul]) [Jul Max], 
    Min([Serie number] * [Aug]) [Aug Min], Max([Serie number] * [Aug]) [Aug Max], 
    Min([Serie number] * [Sep]) [Sep Min], Max([Serie number] * [Sep]) [Sep Max], 
    Min([Serie number] * [Oct]) [Oct Min], Max([Serie number] * [Oct]) [Oct Max], 
    Min([Serie number] * [Nov]) [Nov Min], Max([Serie number] * [Nov]) [Nov Max], 
    Min([Serie number] * [Dec]) [Dec Min], Max([Serie number] * [Dec]) [Dec Max] 
From test 
Inner Join diagonal_matrics On test.[Month] = diagonal_matrics.[Month] 
Group By [Serie] 
+0

Hi, Y.B. спасибо за ваше мнение, но поймите более или менее свою логику. По порядку в первых строках. Это означает, что я собираюсь написать все, что говорит в моей базе данных для emalute «Pivot», потому что у меня в моем столе тысячи записей. Конечно, до сих пор они являются «ребибосами» разных видов (8), и каждый из них имеет все месяцы года ... –

+0

@JosephMarchena Это всего лишь способ включить в пример тестовые данные. Используйте фактическую таблицу вместо 'test' Common Table Expression в вашей базе данных. –

Смежные вопросы