如何在没有数据透视的情况下创建类似的查询?

时间:2016-01-11 23:26:12

标签: sql sql-server sql-server-2008

真的,我想有人可以帮我解决这个问题。我想得到这个例子。我不想使用" Pivot"。我有一些名为' Serie'这显然需要一个小组,因为这重复了太多次,这就是为什么我要对它进行分组。因此,该领域的每个项目" serie"有一个从001到100的代码列表然后我只想获得该列表的最小数量,所以" 001"最大数量" 100"每个月都有。

请帮帮我吧 提前谢谢。

示例:

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      

1 个答案:

答案 0 :(得分: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]