На сервере SQL, как я могу сгруппировать строки, которые имеют одинаковые значения в запросе выбора? - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть следующий запрос sql:

SELECT pd.trackingno                                                AS [Parcel],
         Trim(o.orderno) + '_'
         + CONVERT(NVARCHAR, pd.groupnum )                            AS [Order],
         Isnull(vi.[gtin], '''')                                      AS [Item],
         Isnull(i.skuno, '')                                          AS [Article],
         Isnull(ix_clr.skuno, '')                                     AS [Color],
         Isnull(ix_sze.skuno, '')                                     AS [Size],
         Isnull(i.[description], '')                                  AS [Description],
         CONVERT(DECIMAL(8, 2), oi.unitprice * oi.quantity)           AS [Price],
         CONVERT(INT, oi.quantity)                                    AS [Sent]
  FROM   (SELECT orderno,
                 'S' Type,
                 groupnum
          FROM   shipments
          WHERE  shipbatch BETWEEN '2018-04-26 00:00:00' AND '2018-04-27 00:00:00') ords
         INNER JOIN orders AS o
                 ON o.orderno = ords.orderno
         INNER JOIN packageTable AS pd
                 ON ords.orderno = pd.orderno
                    AND ords.groupnum = pd.groupnum
         INNER JOIN oiTable oi
                 ON oi.orderno = ords.orderno
                    AND Isnull(ords.groupnum, 0) = Isnull(oi.groupnum, 0)
         INNER JOIN detailsTable AS od
                 ON ords.orderno = od.orderno
                    AND oi.linenum = od.linenum
         INNER JOIN itemsTable i
                 ON od.itemid = i.itemid
         left JOIN itemXref ix_clr
                 ON i.itemid = ix_clr.itemid
                    AND ix_clr.skutype = 'CLR'
         left JOIN itemXref ix_sze
                 ON i.itemid = ix_sze.itemid
                    AND ix_sze.skutype = 'SZE'
         INNER JOIN vItemTables vi
                 ON vi.itemid = od.itemid
  GROUP  BY pd.trackingno,
            o.orderno,
            pd.groupnum,
            vi.gtin,
            i.skuno,
            ix_clr.skuno,
            ix_sze.skuno,
            i.description,
            o.tax,
            oi.unitprice,
            oi.quantity

, который генерирует следующий вывод:

+---------------+-----------+----------------+----------+-------+--------+-------+------+
|    Parcel     |   Order   |      Item      |  Alias   | Color |  Size  | Price | Sent |
+---------------+-----------+----------------+----------+-------+--------+-------+------+
| DPV0010260188 | DHRU124_1 | 00717851968853 | 9E9D2256 | Red   | MEDIUM |  2.00 |    1 |
| DPV0010260188 | DHRU124_1 | 00717851968853 | 9E9D2256 | Red   | MEDIUM |     1 |    1 |
| DPV0010260188 | DHRU124_1 | 00021331918437 | 9782189D |       |        |     4 |    1 |
+---------------+-----------+----------------+----------+-------+--------+-------+------+

Как видите, кроме поля отправки, остальные данные такие же. Это не обязательно должно быть одно и то же время. Алии - это, по сути, предметы внутри упаковки. Поэтому я хочу сгруппировать строки на основе значения псевдонима и суммировать их цену и отправленное значение. Чтобы можно было считать как порядок, так и количество одинаковых предметов и их общую стоимость. Прикрепленный скриншот имеет таблицу значений для справки Table values

Ожидаемый результат:

+---------------+-----------+----------------+----------+-------+--------+-------+------+
|    Parcel     |   Order   |      Item      |  Alias   | Color |  Size  | Price | Sent |
+---------------+-----------+----------------+----------+-------+--------+-------+------+
| DPV0010260188 | DHRU124_1 | 00717851968853 | 9E9D2256 | Red   | MEDIUM |  3.00 |    2 |
| DPV0010260188 | DHRU124_1 | 00021331918437 | 9782189D |       |        |     4 |    1 |
+---------------+-----------+----------------+----------+-------+--------+-------+------+

1 Ответ

0 голосов
/ 26 апреля 2018

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

declare @example table (
    ExampleID int identity(1, 1) not null primary key clustered
,   Parcel  nvarchar(255) not null
,   [Order] nvarchar(255) not null
,   Item    nvarchar(255) not null
,   Alias   nvarchar(255) not null
,   Color   nvarchar(255) null
,   Size    nvarchar(255) null
,   Price   money not null
,   [Sent]  int not null
);

insert into @example (Parcel, [Order], Item, Alias, Color, Size, Price, [Sent])

select 'DPV0010260188' , 'DHRU124_1' , '00717851968853' , '9E9D2256' , 'Red'   , 'MEDIUM' ,  2.00 ,    1 union all
select 'DPV0010260188' , 'DHRU124_1' , '00717851968853' , '9E9D2256' , 'Red'   , 'MEDIUM' ,     1 ,    1 union all
select 'DPV0010260188' , 'DHRU124_1' , '00021331918437' , '9782189D' , null    , null     ,     4 ,    1;

select distinct Parcel
     , [Order]
     , Item
     , Alias
     , Color
     , Size
     , sum(Price) Price
     , sum([Sent]) [Sent]
  from @example
  group by Parcel, [Order], Item, Alias, Color, Size

Выход:

Parcel          Order       Item            Alias       Color   Size    Price   Sent
DPV0010260188   DHRU124_1   00021331918437  9782189D    NULL    NULL    4.00    1
DPV0010260188   DHRU124_1   00717851968853  9E9D2256    Red     MEDIUM  3.00    2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...